[英]Stencil.js Jest: mock FileReader 'not defined' unless use window.FileReader
我有一個帶有實用程序 class 的util.ts
模塊,它在input
上傳文件后讀取文件:
// utils/utils.ts
export class JsonFileProcessor {
process(files) {
// ReferenceError: FileReader is not defined
const reader = new FileReader();
}
}
在我的utils.spec.ts
,我模擬了window.FileReader
(到目前為止尚未定義)
import { JsonFileProcessor } from "./utils";
describe("JsonFileProcessor", () => {
it("processes the files", () => {
// createMockFileReader returns a `class MockFileReader`
// that replicates the methods of FileReader
window.FileReader = createMockFileReader(files)
const processor = new JsonFileProcessor();
processor.process(someFiles);
我在 JsonFileProcessor.process 方法ReferenceError: FileReader is not defined
中遇到錯誤,但是如果我將new FileReader()
替換為new window.FileReader()
它可以工作
我已經堅持了很多年了。 我正在使用 Stencil.js 並運行它附帶的 Jest 設置。 還有其他可用的window
屬性(因為我已經對其進行了調試並在控制台記錄了它)
我知道我必須自己模擬 FileReader,但我很難理解為什么 util class 沒有找到模擬的 class,除非我專門使用new window.FileReader()
事實證明,Stencil 的jest
設置不包括jsdom
。 Stencil 使用精簡版的Puppeteer進行單元測試 - window
和document
屬性可以通過 Stencil 的newSpecPage()
返回的page
object 訪問
由於我的測試在沒有newSpecPage
的情況下運行,我需要使用global
object 代替,例如global.FileReader = createMockFileReader(files)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.