我希望有人可以帮助我理解 js 原型和jest.spOn().
我有一个小示例:文件中的示例类TestObj.ts:
export default class TestObj {
foo() {
// Do Something e.g.
console.log("Hello World!");
}
}
Run Code Online (Sandbox Code Playgroud)
以下示例测试用例成功,但console.log从未执行。
import TestObj from './TestObj';
const spyObj = jest.spyOn(TestObj.prototype, 'foo');
test('debug test', () => {
const obj = new TestObj();
obj.foo();
expect(spyObj).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
如果我将示例测试用例更改为以下内容,则测试会成功并且该console.log语句将按预期调用。
import TestObj from './TestObj';
test('debug test', () => {
const spyObj = jest.spyOn(TestObj.prototype, 'foo');
const obj = new TestObj();
obj.foo();
expect(spyObj).toHaveBeenCalled();
});
Run Code Online (Sandbox Code Playgroud)
知道为什么使用全局间谍变量的版本不能按预期工作吗?
它似乎与原型无关。对于没有任何类的函数也存在同样的问题,将第一个代码片段 ( TestObj.ts) 编辑为: …