示例如下:
export class ABC {
constructor() {
this.method1();
}
method1() {
console.log();
}
}
假设method1
中有一些对外部方法的调用正在停止代码前进。我不想进入method1
。
现在的问题是当我这样做时:
describe('test cases!', () => {
let abc: ABC;
beforeEach(() => {
spyOn(abc, 'method1').and.stub();
abc = new ABC();
jest.resetAllMocks();
});
});
抛出错误。
在类初始化之后,我不能放置spyOn
。
有想法吗?
感谢帮助。
答案 0 :(得分:0)
method1
存在于ABC.prototype
上,您可以对其进行监视并替换实现,然后构造新的ABC
实例:
class ABC {
constructor() {
this.method1();
}
method1() {
throw new Error('should not get here');
}
}
test('ABC', () => {
const spy = jest.spyOn(ABC.prototype, 'method1'); // spy on the method of the prototype
spy.mockImplementation(() => {}); // replace the implementation
const abc = new ABC(); // no error
expect(spy).toHaveBeenCalled(); // SUCCESS
})
答案 1 :(得分:0)
要基于@ brian-lives-outdoors答案,我使用以下内容:
describe('test cases!', () => {
beforeEach(() => {
ABC.prototype.abc = jest.fn((data) => { result: 'some mock here', data)
abc = new ABC();
});
afterEach(() => {
ABC.prototype.abc.mockRestore()
})
});