0
아이들이 타이머를 시작하고 1 초 간격으로 남은 시간을 알려주는 Timer 구성 요소를 만들려고합니다.Jest : 가짜 setInterval이 예상대로 작동하지 않습니다.
/* Test */
jest.useFakeTimers()
it.only('should update the reamining time every second',() => {
const time = 1/12
const wrapper = shallow(<Timer time={time} />)
wrapper.find('.start').simulate('click')
jest.runAllTimers()
expect(setInterval.mock.calls.length).toBe(4)
})
/* Code */
updateTimeLeft() {
const now: number = +new Date()
const timeLeft = this.state.endTime - now
if (timeLeft < 0) {
clearInterval(this.state.timeInterval)
}
this.setState({ timeLeft })
}
intializeTimer(minutes: number) {
const startTime: number = new Date().getTime()
const endTime: number = new Date(startTime + minutes * 60 * 1000).getTime()
this.setState({
startTime,
endTime
})
const timeInterval: NodeJS.Timer = global.setInterval(
() => this.updateTimeLeft(),
1000
)
this.setState({ timeInterval })
}
나는 다음과 같은 검사를
코드가 작동합니다. 문제는 테스트에서 setInteval.mock.calls.length = 1
, 상관 없습니다.
Jest 가짜 타이머에 대해 오해 한 것이 있습니까?
고맙습니다 ❤️