axm*_*m__ 5 javascript unit-testing node.js jestjs
我嘲笑了一些 nodejs 模块(例如,其中之一是fs)。我将它们放在一个__mocks__文件夹(同一级别 als node_modules)文件夹中,并且模块模拟工作。但是,无论我使用哪个“测试清除之间”选项,下一个测试都不是“沙盒化”的。这里出了什么问题?
fs模拟模块的一个非常简化的示例是:
// __mocks__/fs.js
module.exports = {
existsSync: jest.fn()
.mockReturnValueOnce(1)
.mockReturnValueOnce(2)
.mockReturnValueOnce(3)
}
Run Code Online (Sandbox Code Playgroud)
我只是期望在每次测试中,无论何时init()被调用(见下文),都会existsSync从值 1 重新开始: 的第一个值jest.fn().mockReturnValue()。在测试文件中,我具有以下结构:
// init.test.js
const init = require("../init");
const { existsSync } = require("fs");
jest.mock("fs");
describe("initializes script", () => {
afterEach(() => {
// see below!
});
test("it checks for a package.json in current directory", () => {
init();
});
test("it stops script if there's a package.json in dir", () => {
init(); // should be run in clean environment!
});
}
Run Code Online (Sandbox Code Playgroud)
再次非常简化,init.js 文件
const { existsSync } = require("fs");
console.log("value of mocked response : ", existsSync())
Run Code Online (Sandbox Code Playgroud)
我existsSync()在第一次和第二次运行后init()分别得到以下结果afterEach():
1,21,undefined1,21,undefined有人知道我做错了什么吗?如何在同一套件中的测试之间清除模块模拟?如有必要,我很乐意澄清。谢谢!
重置模块并为每个测试再次要求它们:
describe("initializes script", () => {
afterEach(() => {
jest.resetModules()
});
beforeEach(() => {
jest.mock("fs");
})
test("it checks for a package.json in current directory", () => {
const init = require("../init");
init();
});
test("it stops script if there's a package.json in dir", () => {
const init = require("../init");
init();
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5663 次 |
| 最近记录: |