jest.runAllTimers() 抛出类型错误
jest.runAllTimers() throws TypeError
我正在尝试 运行 使用 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)
我不知道发生了什么。为什么它不能完成 运行ning 测试?
您遇到的错误可能是因为 setTimeout
的使用。 setTimeout
接受一个函数作为第一个参数,但你给它的是 fireEvent.click(pauseButton)
的任何 return 类型。将代码更改为:
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');
})
我正在尝试 运行 使用 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)
我不知道发生了什么。为什么它不能完成 运行ning 测试?
您遇到的错误可能是因为 setTimeout
的使用。 setTimeout
接受一个函数作为第一个参数,但你给它的是 fireEvent.click(pauseButton)
的任何 return 类型。将代码更改为:
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');
})