gpt4 book ai didi

javascript - Jasmine 2.0 完成及 afterEach

转载 作者:行者123 更新时间:2023-12-03 07:17:33 24 4
gpt4 key购买 nike

我正在使用jasmine 2.0

我正在尝试理解 done() 函数。

使用以下基本 Jasmine 代码:

describe('Jasmine 2.0 done()', function() {

beforeEach(function () {
console.log('install');
jasmine.clock().install();
});

afterEach(function () {
console.log('uninstall');
jasmine.clock().uninstall();
});


it('should wait 1ms then complete', function (done) {

setTimeout(function(){
console.log('async');
expect(true).toBe(true);
done();
}, 1)

});

});

我认为我看到发生的事情:

  • beforeEach 运行,安装时钟,记录“install”
  • 测试运行,setTimeout 执行任何操作
  • 测试等待 5 秒(jasmine 失败前的默认超时时间)
  • 测试失败,因为 done() 从未被调用。
  • 我知道这一点是因为我收到错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。
  • afterEach 然后无论如何都会运行,卸载时钟并记录“卸载”

期望那样

  • beforeEach 运行,安装时钟并记录“install”
  • 测试运行,等待一毫秒,运行日志、expect 和 done()
  • afterEach 运行,卸载时钟并记录“卸载”
  • 测试通过,没有错误

我认为这是因为文档说

And this spec will not complete until its done is called.

所以我假设 afterEach 会等到 done() 被调用才执行。

我也尝试在 afterEach 中添加 done()

afterEach(function (done) {
console.log('uninstall');
jasmine.clock().uninstall();
done();
});

这没有什么区别。

为什么这个测试没有成功?

我对 done() 函数有什么不理解的地方?

plunker显示问题

最佳答案

安装 jasmine 的模拟时钟后,setTimeout 行为将被覆盖。当通过 jasmine.clock().tick 函数向前移动时钟时,会触发对任何已注册回调的调用,这需要若干毫秒 ( link to jasmine docs )

Calls to any registered callback are triggered when the clock is ticked forward via the jasmine.clock().tick function, which takes a number of milliseconds.

在您的情况下,测试规范将如下所示:

describe('Jasmine 2.0 done()', function() {

beforeEach(function () {
console.log('install');
jasmine.clock().install();
});

afterEach(function () {
console.log('uninstall');
jasmine.clock().uninstall();
});


it('should wait 1ms then complete', function (done) {

setTimeout(function(){
console.log('async');
expect(true).toBe(true);
done();
}, 1);

jasmine.clock().tick(1);
});

});

关于javascript - Jasmine 2.0 完成及 afterEach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36354211/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com