【问题标题】:Jest not recognizing spy is called开玩笑不认识间谍被称为
【发布时间】:2018-04-02 22:39:09
【问题描述】:

我在确认使用 Jest 调用我的函数时遇到了一点问题。我有两个模拟函数。一个只是模拟返回一个承诺,另一个是一个简单的间谍,应该在第一个的 then() 块中调用。

下面,在测试中,你会看到两个期望。第一个期望过去了。第二个没有。即expect(sendSpy).toHaveBeenCalled() 通过但expect(sendCallbackSpy).toHaveBeenCalled() 不通过。

但是,当我将 console.log 语句放入文件中时(如下所示),两者都执行(即“之前”和“之后”),如果我在控制台中记录 window.props.onSend,它会确认模拟函数存在。所以看起来应该调用该函数。

另外需要注意的是,我的实现要求我从window 传入props 对象中的回调。此外,要在 Jest 中模拟 window 上的内容,您只需模拟 global,如下所示。我认为这与问题无关,但值得指出。

会不会是在 then() 块中调用实际函数之前运行期望?

export class MyButton extends Component {
  handleClick = () => {
    this.props.send(this.props.url).then(res => {
      console.log('before', window.props.onSend)
      window.props.onSend(res.data)
      console.log('after')
    })
  }

  render() {
     return <button onClick={handleClick} />
  }
}



//test

  test('it calls the identity function when button is clicked', () => {
    const sendSpy = jest.fn(() => { return Promise.resolve({ data: 'hello' }) })
    const sendCallbackSpy = jest.fn()
    global.props = { onSend: sendCallbackSpy }

    wrapper = shallow(<MyButton send={sendSpy} } />)
    const button = wrapper.find('button')
    button.simulate('click')

    expect(sendSpy).toHaveBeenCalled()
    expect(sendCallbackSpy).toHaveBeenCalled()
  })

【问题讨论】:

    标签: javascript reactjs unit-testing jestjs enzyme


    【解决方案1】:

    在测试第二个间谍之前,您需要等待承诺:

    test('it calls the identity function when button is clicked', async() => {
        const request = Promise.resolve({ data: 'hello' })
        const sendSpy = jest.fn(() => request)
        const sendCallbackSpy = jest.fn()
        global.props = { onSend: sendCallbackSpy }
    
        wrapper = shallow(<MyButton send={sendSpy} } />)
        const button = wrapper.find('button')
        button.simulate('click')
    
        expect(sendSpy).toHaveBeenCalled()
        await request
        expect(sendCallbackSpy).toHaveBeenCalled()
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 2018-08-14
      相关资源
      最近更新 更多