- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的 componentDidMount 中有一个 Action ,它在 30000 毫秒后从 Reddit 获取图像。我想测试这个但无法弄清楚?!?!有什么建议吗?
componentDidMount() {
this.getHumorEvery(30000)
}
getHumorEvery = async (ms) => {
await this.props.getHumor()
return setInterval(() => {
this.props.getHumor()
}, ms)
因此 getHumor() 会立即得到调用。然后在 30000 毫秒后再次调用它,依此类推。
然后我的测试...
it('should refetch images every 30000 ms', () => {
const clock = sinon.useFakeTimers();
const getHumorSpy = sinon.spy();
renderComponent(requiredProps({ getHumor: getHumorSpy }));
clock.tick(30000)
sinon.assert.calledTwice(getHumorSpy)
})
测试失败,因为 getHumor 只被调用了一次。 setInterval() 永远不会被解雇?
最佳答案
在 promises 上调用 then 并在异步函数中调用 await 为事件循环排队代码,该事件循环在当前同步代码完成且时钟滴答作响之前不会执行。同样,setTimeout 通常将代码添加到队列中,该队列也必须等到下一个时钟滴答。
Sinon fake timers “是 setTimeout 和 friend 的同步实现”,它们“覆盖全局函数”并管理使用 setTimeout 和类似全局变量排队的代码,并在模拟时钟滴答时同步调用它。
仍在为事件循环排队的代码与之前为事件循环排队但现在被同步调用的代码之间的这种断开可能会导致问题(如 this 和 this )。
这些问题通常可以通过插入事件循环的手动循环来解决,以允许队列中的任何未决代码在同步模拟时钟滴答之前执行。
在这种情况下,将测试转换为异步函数并在已解决的 Promise 上调用 await 使队列中的待处理代码有机会在同步时钟滴答之前运行,从而允许代码按预期运行并正确断言:
it('should refetch images every 30000 ms', async () => {
const clock = sinon.useFakeTimers();
const getHumorSpy = sinon.spy();
renderComponent(requiredProps({ getHumor: getHumorSpy }));
// let event loop cycle
await Promise.resolve();
clock.tick(30000);
sinon.assert.calledTwice(getHumorSpy);
})
关于reactjs - 使用 sinon.fakeTimers 测试 setInterval() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51526312/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!