茉莉花钟如何工作?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了茉莉花钟如何工作?相关的知识,希望对你有一定的参考价值。
我不想读几个小时的代码来找到相关的部分,但我很好奇茉莉如何实现它的时钟。有趣的是它可以使用同步测试代码测试异步代码。 AFAIK与当前node.js一起支持ES5,这是不可能的(异步函数在ES7中定义)。它是用estraverse解析js代码并从同步测试中构建异步测试吗?
只是我所说的一个例子:
it("can test async code with sync testing code", function () {
jasmine.clock().install();
var i = 0;
var asyncIncrease = function () {
setTimeout(function () {
++i;
}, 1);
};
expect(i).toBe(0);
asyncIncrease();
expect(i).toBe(0);
jasmine.clock().tick(2);
expect(i).toBe(1);
jasmine.clock().uninstall();
});
在这里,expect(i).toBe(1);
应该在回调中。
答案
install()
函数实际上用一个模拟函数替换setTimeout
,jasmine让你可以更好地控制。这使它同步,因为没有实际等待。相反,您可以使用tick()
函数手动向前移动它,该函数也是同步的。
假设您有一个内部设置超时为5小时的函数。 Jasmine只是替换了setTimeout
调用,以便在调用tick()
时调用回调,以便内部计数器达到或超过5小时标记。这很简单!
以上是关于茉莉花钟如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
如何修复类型 'AsymmetricMatcher<any>' 不可分配给类型 '() => void'。在茉莉花/开玩笑
append() 在这个代码片段中是如何工作的?与特定变量混淆[重复]