gpt4 book ai didi

javascript - 开 Jest ,用不同的参数模拟同一个函数两次

转载 作者:行者123 更新时间:2023-12-03 13:17:40 26 4
gpt4 key购买 nike

我是 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- 如果您希望模拟在每次调用时返回不同的结果:

使用mockReturnValueOnce

myMock
.mockReturnValueOnce(10)
.mockReturnValueOnce('x')
.mockReturnValue(true);

第一次调用时将返回 10,第二次调用时返回 'x',此后随时返回 true

2-如果您想检查调用模拟的参数:

使用toHaveBeenNthCalledWith

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com