我是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()
})
型
这对第一个例子很有用,但我似乎找不到适合我的正确答案。你能帮我吗?:)
3条答案
按热度按时间rxztt3cl1#
1-如果您希望mock在每次调用时返回不同的结果:
使用mockReturnValueOnce
字符串
将在第一次调用时返回
10
,在第二次调用时返回'x'
,在此之后的任何时间返回true
。2-如果要检查mock调用的参数:
使用toHaveBeenNthCalledWith
型
会Assert
mock
时,使用'1st call args'
调用->mock('1st call args')
mock
被'2nd call arg 1'
调用,而'2nd call arg 2'
第二次被调用时->mock('2nd call arg 1', '2nd call arg 2')
3-如果您想要基于函数参数的特定响应
jest默认不支持它,但你可以看看jest-when,它允许你做一些类似的事情:
型
x33g5p2x2#
这就是我们如何用不同的参数模拟同一个函数两次:
导入Axios:
字符串
使用mockedAxios:
型
moiiocjp3#
请查看Jest文档。当模拟一个函数时,你可以返回不同的值,一旦返回一个你想要的值,然后再返回一个不同的值。