当前位置: 首页 > 知识库问答 >
问题:

茉莉花2.0完成后

公孙向荣
2023-03-14

我正在使用jasmine 2.0。

我试图理解done()函数。

使用以下基本茉莉花代码:

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运行,安装时钟,记录安装
  • 测试运行时,setTimeout不执行任何操作
  • 测试等待5秒(Jasmine失败前的默认超时)
  • 测试失败,因为从未调用do()
  • 我知道这一点,因为我得到了错误:超时-异步回调没有在jasmine指定的超时内调用。DEFAULT_TIMEOUT_INTERVAL。
  • 然后运行,卸载时钟并记录卸载

我希望如此

  • 每次运行之前,安装时钟并记录“安装”
  • 测试运行,等待一毫秒,运行日志、expect和done()
  • 每次运行后,卸载时钟并记录“卸载”
  • 测试无误通过

我这么想是因为留档说

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

所以我假设每次之后都会等到调用done()来执行。

我也尝试过在每个代码之后添加do()

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

这没什么区别。

为什么这次试验没有成功?

关于do()函数,我有什么不明白的地方?

柱塞显示问题


共有2个答案

颛孙沈义
2023-03-14

使用Jasmine异步测试,我们必须调用beforeach()afterEach()函数中的异步代码,该函数在descripe()函数块中的每个it()函数块之前运行。

这意味着必须在上面提到的方法中调用do()回调,否则测试将变得同步,如果超过超时间隔,它将阻止调用线程。

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

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

这是一个正在工作的JSFIDLE。

郎星汉
2023-03-14

安装jasmine的模拟时钟时,setTimeout行为被覆盖。通过jasmine.clock().tick函数向前勾选时钟时,会触发对任何已注册回调的调用,该函数需要毫秒(链接到jasmine文档)

当时钟通过jasmine.clock(). tick函数向前滴答时,将触发对任何已注册回调的调用,这需要几毫秒。

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

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);
    });

});
 类似资料:
  • 我使用文件在 Webstorm 8.0.4 中设置了茉莉花集成 这与语法突出显示的工作方式一样,我可以跳转到声明,文档显示正确。所以连接看起来很好。然而,JSHint仍然为每个关键字抱怨它没有被定义,例如 另请参见以下屏幕截图。正如您所看到的,语法突出显示很好,但我仍然收到一个错误。

  • 问题内容: 我通常的测试用例看起来像 而且Jasmine 2.0异步测试应该看起来像 如何在一次测试中同时使用完成和注入? 问题答案: 这应该起作用;我更新到Jasmine 2.0时遇到了同样的问题

  • 我刚刚安装了。我试图将添加到测试中,但遇到错误 ReferenceError:未定义beforeAll 查看堆栈跟踪时,我看到jasmine 1.3.1是量角器的子模块: C:\用户\bmackey\AppData\漫游\npm\node_modules\量角器\node_modules\mini jasminenode\lib\jasmine-1.3.1.js:913: 21 jasmine 2

  • 我正试图写一个Jasmine测试来覆盖一个Twitter Boostrap模态对话框。当调试器行被注释掉时,测试失败。当调试器暂停处理并且我继续时,它通过。我认为引导模式的转换导致了这个问题,因为在我进行expect调用时,模式对话框还不在DOM中。 如何在测试期间禁用转换? 谢谢 感谢Jarred,您的解决方案非常有效!这是我的工作测试:

  • 问题内容: 当我尝试使用 $ httpBackend.flush();时 我收到错误 TypeError:$ browser.cookies不是一个函数。 我找不到有关这种错误和解决方案的任何信息。 角度:1.3.15 茉莉花:2.3.4 问题答案: 我相信您在版本中使用的是角度模拟,而您的代码使用的是angular 。请检查您是否在为应用程序中实现的版本使用模拟程序。同样,提供您的茉莉花测试配置

  • 我熟悉python单元测试测试,如果断言失败,该测试将被标记为“失败”,并继续进行其他测试。另一方面,茉莉花将继续通过所有期望,即使其中一个失败。在第一个预期失败后,如何使Jasmine停止处理测试? 我想错了吗?我有一些测试有很多< code>expect,当只有第一个错误时,显示所有的堆栈跟踪似乎是一种浪费。