用jest处理测试隔离的最佳方法是什么?我希望用静态方法测试ES6类,并模拟单元测试中不直接涉及的方法。
我的班级档案:
class Util {
static getFirstName() {
return "John";
}
static getLastName() {
return "Doe";
}
static getFullName(){
return `${Util.getFirstName()} ${Util.getLastName()}`;
}
}我的测试文件:
import Util from '../src/util';
test("Test getFullName", () => {
Util.getFirstName = jest.fn().mockReturnValue("MockFirstName");
Util.getLastName = jest.fn().mockReturnValue("MockLastName");
expect(Util.getFullName()).toBe("MockFirstName MockLastName")
});
test("Test getFirstName", () => {
expect(Util.getFirstName()).toBe("John")
});
test("Test getLastName", () => {
expect(Util.getLastName()).toBe("Doe")
});这样,我的最后两个测试就会失败,因为在第一个测试上设置的模拟仍然是活动的。
发布于 2017-04-07 10:02:18
假设这些import语句被转换为require,您应该能够使用resetModules
beforeEach(() => {
// Clears the require cache so that a new module is require'd
// before each test.
jest.resetModules();
});然后,在每个测试中,您需要要求模块:
test("name", () => {
const { default: Util } = require("../src/util");
});或者如果您可以使用动态导入语法:
test("name", () => import("../src/util")
.then(({ default: Util }) => {
expect(Util.getFirstName()).toBe("John");
})
);https://stackoverflow.com/questions/43275143
复制相似问题