Javascript 这个Jasmine测试代码是如何工作的?

Javascript 这个Jasmine测试代码是如何工作的?,javascript,callback,jasmine,Javascript,Callback,Jasmine,我正在阅读Manuel Kiessling的节点工匠,在关于事件发射器的章节中,他提供了以下Jasmine测试规范 it('should fire a "grew" event when the file grew in size', function(done) { var path = '/var/tmp/filesizewatcher.test'; exec('rm -f ' + path + ' ; touch ' + path, function() {

我正在阅读Manuel Kiessling的节点工匠,在关于事件发射器的章节中,他提供了以下Jasmine测试规范

it('should fire a "grew" event when the file grew in size', function(done) {
    var path = '/var/tmp/filesizewatcher.test';
    exec('rm -f ' + path + ' ; touch ' + path, function() {
        watcher = new FilesizeWatcher(path);
        watcher.on('grew', function(gain) {
            expect(gain).toBe(5);
            done();
        });
        exec('echo "test" > ' + path, function() {});
    });
});
我知道我们必须触发
done()
,告诉Jasmine事件确实已触发,并执行注册为
it()

我不明白的是,当触发watcher
growth
事件所需的
exec
语句位于另一个依赖于执行的
done
的回调中时,代码是如何到达的。我尝试将
exec
移到内部回调之外,但测试超时,我不明白为什么。我们不需要这部分是同步的,以便任何事情真正开始发生吗


帮我从程序的桎梏中解放出来!我很困惑,我的问题甚至对我来说都很困惑。

好吧,我把这一切都颠倒过来了,我被作者的解释弄糊涂了

Jasmine使用
expect
和匹配器来评估测试是否通过,从而评估测试是否完成。测试事件发射器等异步函数需要我们让Jasmine知道测试何时实际完成,因此需要
done()
。在这种情况下,不需要启动对
it()
的Jasmine回调,而需要完成规范的执行

茉莉花:

在调用其完成之前,此规范不会完成

默认情况下,jasmine将等待5秒钟,等待异步规范生效 在导致超时失败之前完成。如果超时在 如果调用“完成”,则当前规范将标记为“失败”和“套件” 执行将继续,就像调用了done一样


嘿,黑鸟57:你有没有看过所有的教程?我在迁移过程中遇到了问题。@Lucy小姐,不,我没有,我只是使用了我需要的,也许会问一个新问题?