我正在使用fs模块将一个html字符串导入到我的模块中,如下所示:
const fs = require('fs');
const htmlString = fs.readFileSync("../utils/htmlString.html").toString();
然后,在我的测试文件中,我尝试模拟fs模块如下:
const fs = require('fs');
jest.mock("fs", () => {
return {
readFileSync: jest.fn()
}
})
fs.readFileSync.mockReturnValue("test string");
我可能错误的逻辑告诉我,它应该正确地模拟原始的字符串导入,并将其替换为“test string”字符串。然而,在运行测试时,它抛出:
TypeError:无法读取未定义的属性“toString”
我理解这意味着模拟没有成功,因为它应该成功地在字符串示例上调用.toString()。
我在这里做错了什么?
2条答案
按热度按时间dxxyhpgq1#
您不需要为
jest.mock('fs')
显式提供模块工厂参数。jest.mock()
在需要时使用自动模拟版本模拟模块。这意味着fs.readFileSync
是一个模拟方法,与jest.fn()
相同。您需要确保在模拟返回值之后请求被测模块,因为模块作用域中的代码将在需要时立即执行。
例如
index.js
:index.test.js
:试验结果:
jest.config.js
:软件包版本:
hwamh0ep2#
我的一个函数调用fs.readFileSync,所以我想stub readFileSync,这样它就会在我的一个Jest测试中抛出一个错误。
utils.ts
utils.test.ts