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

标签 javascript reactjs jestjs

我是 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/

相关文章:

javascript - Mongodb shell JavaScript 读取不同的表

javascript - vue.js v-link 不起作用

javascript - PreventDefault() 方法不阻止页面重新加载 ReactJS

vue.js - 用 jest : $route is always undefined 进行 Vue 测试

javascript - 当输入位于无状态功能组件中时,单击提交按钮时可以将输入框的值设置为空字符串吗?

javascript - 未定义的 array.length 返回 true 而不是 false

javascript - 验证 DOM 嵌套 (...) : <button> Warning

android - react native 错误 : TypeError: null is not an object _RNGestureHandlerModule. default.Direction

javascript - 在 Jest 中,定义全局变量和在 BeforeAll 中定义一样吗?

javascript - 你如何为 getInitialProps 编写 Jest 测试?