我是 JEST 新手,目前正在测试一个 Javascript 组件,该组件在其 onComponentDidMount 中进行 API 调用。根据 ajax 调用(api 调用)的返回数据,我的组件显示表格或简单文本。
我的 JEST 测试相当简单,目前我只是测试以匹配当前的快照。因此,由于我的 api 调用可以返回不同的数据,因此我的快照可以有两个不同的方面:1) 一个带有表格,2) 一个带有简单的文本。
我成功地模拟了这样的服务
jest.mock("/myService", () => ({
index: (data, callback) => {
const return = [
{
{...}
},
]
callback(return)
},
}))
我的组件正确调用了 myService.index()
,我希望向它传递不同的值来进行回调。
这是它的样子
it("has proper snapshot", () => {
const props = {...}
const component = shallow(<MyComponent {...props} />)
expect(component).toMatchSnapshot()
})
这对于第一个例子非常有效,但我似乎找不到适合我的正确答案。你能帮助我吗 ? :)
最佳答案
1- 如果您希望模拟在每次调用时返回不同的结果:
myMock
.mockReturnValueOnce(10)
.mockReturnValueOnce('x')
.mockReturnValue(true);
第一次调用时将返回 10
,第二次调用时返回 'x'
,此后随时返回 true
。
2-如果您想检查调用模拟的参数:
expect(mock).toHaveBeenNthCalledWith(1, '1st call args');
expect(mock).toHaveBeenNthCalledWith(2, '2nd call arg 1', '2nd call arg 2');
将断言
mock
第一次调用时使用'1st call args'
进行调用 ->mock('1st call args')
第二次使用
'2nd call arg 1'
和'2nd call arg 2'
调用mock
调用 ->mock('第二次调用 arg 1', '第二次调用 arg 2')
3-如果您想要基于函数参数的特定响应
jest 默认不支持,但你可以看看 jest-when它允许您执行以下操作:
when(fn).calledWith(1).mockReturnValue('yay!')
关于javascript - 开 Jest ,用不同的参数模拟同一个函数两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53887173/