Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest使用不同的参数模拟同一函数两次_Javascript_Reactjs_Jestjs - Fatal编程技术网

Javascript Jest使用不同的参数模拟同一函数两次

Javascript Jest使用不同的参数模拟同一函数两次,javascript,reactjs,jestjs,Javascript,Reactjs,Jestjs,我不熟悉JEST,目前正在测试一个Javascript组件,该组件在其onComponentDidMount中进行API调用。根据ajax调用(api调用)的返回数据,我的组件显示一个表或一个简单的文本 我的JEST测试相当简单,因为现在我只测试匹配当前快照。因此,由于我的api调用可以返回不同的数据,我的快照可以有两个不同的方面:1)一个是表2)一个是简单的文本 我成功地模仿了这种服务 jest.mock("/myService", () => ({ index: (data, ca

我不熟悉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()
  })
it(“有正确的快照”,()=>{
const props={…}
常量分量=浅()
expect(component.toMatchSnapshot())
})

这对于第一个例子很有效,但我似乎找不到适合我的正确答案。你能帮我吗?:)

请在这上面查看。模拟函数时可以返回不同的值,一次返回所需的值,然后返回不同的值。

1-如果希望模拟在每次调用时返回不同的结果:

使用

将在第一次呼叫时返回
10
,在第二次呼叫时返回
'x'
,并在之后的任何时间返回
true

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

使用

将断言

  • 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不支持它,但您可以查看它,它允许您执行以下操作:

when(fn).calledWith(1).mockReturnValue('yay!')

好了,这已经帮了大忙了。但是,如何将值传递给这个模拟呢?基本上,我想在一种情况下传递给它,
{a:1,b:2}
,在另一种情况下传递给它,
{}
我不知道tobeenthcalledWith,它看起来很实用,谢谢伙计!要是这些笑话文件能如此有用和简洁就好了。非常感谢。
expect(mock).toHaveBeenNthCalledWith(1, '1st call args');
expect(mock).toHaveBeenNthCalledWith(2, '2nd call arg 1', '2nd call arg 2');
when(fn).calledWith(1).mockReturnValue('yay!')