[英]Mocking static class function in jest doesn't work
给定一个非常基本的 javscript class
Foo.js
export default class Foo {
static bar() {
console.log("bar");
}
}
如何模拟酒吧 function?
这是我认为应该有效的(但不是):
Foo.test.js
import Foo from "./Foo.js";
it("test", () => {
jest.mock("./Foo.js"); // mock Foo class
const myMock = jest.fn(); // create a new mocking function
Foo.prototype.bar = myMock;
Foo.bar();
console.log(myMock.mock.calls);
});
但随后在测试中调用Foo.bar()
调用原始 function (因此“bar”被记录)和console.log(myMock.mock.calls);
打印一个空列表,因此使用了 mocking function 。
我究竟做错了什么?
class 导入后被模拟,模拟不影响它。 jest.mock
应该移动到顶层,以便在import
之前将其提升,或者如果 class 不需要为整个套件进行模拟, import
应该放在测试中并可能替换为require
。
bar
方法没有被模拟,因为它是 static 方法,但它是被模拟的原型方法。 不应通过赋值来模拟方法,因为这会阻止它们被恢复。
它应该是:
jest.spyOn(Foo, 'bar').mockImplementation(() => ...);
最好使用jest.restoreAllMocks()
或restoreMocks
配置选项恢复它,以免影响其他测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.