我想模拟一个对象的函数帖子。我这样说:
jest.mock('../../apis.js', () => {
return () => {
return {
post: jest.fn(() => {
console.log('POST was called !');
return Promise.resolve();
}),
};
};
});
然后,我提出要求:
const apis = require('../../apis');
最后,我致电我的服务,该服务将从post()
模块调用apis
函数:
client.doPost()
.then(() => {
console.log('count: ', apis().post.mock.calls.length);
expect((apis().post)).toBeCalled();
});
doPost()
函数调用模拟的post()
一个(打印出'POST被叫!'消息)但是count is equal to 0
并且期望失败。
我做错了什么? 谢谢你的帮助!
答案 0 :(得分:1)
这需要进行检查,但我想您在apis().post.mock.calls.length
电话中访问的变量与您在client.doPost()
电话中使用的变量不同。
实际上,当你调用apis()
时,你的模拟会在每次调用时返回一个新对象。
您要做的是将存根存储在专用变量中,并在then()
测试中访问它:
const postStub = jest.fn(() => {
console.log('POST was called !');
return Promise.resolve();
});
jest.mock('../../apis.js', () => {
return () => {
return {
post: postStub,
};
};
});
然后使用它(当然应该在同一个文件中):
client.doPost()
.then(() => {
console.log('count: ', postStub.mock.calls.length);
expect((apis().post)).toBeCalled();
});
答案 1 :(得分:0)
解决方法
global.iPost=0;
jest.mock('../../apis.js', () => {
return () => {
return {
post: jest.fn(() => {
console.log('POST was called !');
global.iPost++;
return Promise.resolve();
}),
};
};
});
expect(global.iPost).toEqual(1)