【问题标题】:jest.runAllTimers() throws TypeErrorjest.runAllTimers() 抛出 TypeError
【发布时间】:2020-10-07 14:27:09
【问题描述】:

我正在尝试使用create-react-app 中的内置react-scripts test 脚本运行以下测试:

Timer.test.js

render(<Timer />)
const pauseButton = screen.getByText('pause')
const timerOutput = screen.getAllByRole('heading')[1]

describe('Timer', () => {
  test('renders Timer component', () => {
    expect(screen.getByText(/session/i)).toBeInTheDocument()
    expect(screen.getByText(/25/)).toBeInTheDocument()
  })

  test('counts down when unpaused', async () => {
    jest.useFakeTimers()
    fireEvent.click(pauseButton)
    setTimeout(
      fireEvent.click(pauseButton),
      1125
    )
    jest.runAllTimers()
    expect(timerOutput).toHaveTextContent('24:59')
  })
})

Jest 似乎工作正常,直到它到达 jest.runAllTimers(),当我收到以下错误时:

 TypeError: callback.apply is not a function

      23 |       1125
      24 |     )
    > 25 |     jest.runAllTimers()
         |          ^
      26 |     expect(timerOutput).toHaveTextContent('24:59')
      27 |   })
      28 | 

      at node_modules/@jest/fake-timers/build/jestFakeTimers.js:524:25
      at callback (node_modules/@jest/fake-timers/build/jestFakeTimers.js:516:29)
      at FakeTimers._runTimerHandle (node_modules/@jest/fake-timers/build/jestFakeTimers.js:560:9)
      at FakeTimers.runAllTimers (node_modules/@jest/fake-timers/build/jestFakeTimers.js:193:12)
      at Object.<anonymous> (src/features/Timer.test.js:25:10)

我不知道发生了什么。为什么它不会完成运行测试?

【问题讨论】:

    标签: javascript reactjs jestjs create-react-app


    【解决方案1】:

    您遇到的错误可能是因为使用了setTimeoutsetTimeout 接受一个函数作为第一个参数,但无论fireEvent.click(pauseButton) 的返回类型如何,你都给它。将代码更改为:

    test('counts down when unpaused', async () => {
        jest.useFakeTimers();
        fireEvent.click(pauseButton)
        setTimeout(() =>  fireEvent.click(pauseButton), 1125);
                // ^ NOTE HERE
        jest.runAllTimers();
        expect(timerOutput).toHaveTextContent('24:59');
      })
    

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 2016-11-18
      • 1970-01-01
      • 2021-10-07
      • 2018-08-28
      • 2014-10-05
      • 1970-01-01
      • 2023-03-14
      • 2021-08-05
      相关资源
      最近更新 更多