【问题标题】:Jasmine spec "it" is called before async "beforeAll" calls doneJasmine 规范“it”在异步“beforeAll”调用完成之前被调用
【发布时间】:2017-03-03 13:10:58
【问题描述】:

我编写了一个 Angular 2 应用程序,我想用 karma 运行的 jasmine 对其进行单元测试。 我对 Jasmine 和所有这些东西都很陌生,所以它是我的第一个 Angular 应用程序。 一切都是通过 npm 安装的。 在浏览器中运行的测试。 我使用 Karma 作为测试运行器。

版本:

  • 茉莉花:2.4.1
  • 业力:1.5.0
  • 铬:56.0.2924
  • 操作系统:Mac OS X 10.12.3

问题: 我创建了一个套件,如下:

describe('Service with asyncCall', () => {
        beforeAll((done) => {
             jasmine.DEFAULT_TIMEOUT_INTERVAL = 8000;

            new Service().asyncCall().then((result) => {
                        console.log(result);
                        done();
                    }
                );
            }
        );

        it(
            'should be true',
            () => {
                console.log('test');
                expect(true).toEqual(true);
            }
        );
}

asyncCall如下:

asyncCall() {
    var out = new Promise(
       (resolve) => {
            setTimeout(
                () => {
                    resolve('success');
                },
                2000
            );
        }
    );

    return out;
}

我希望输出类似于

...
success
test
...

但是浏览器控制台中的实际输出是

测试 成功 此外,测试失败并显示以下消息

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

请任何人帮助我,或指出正确的方向。 对不起,我的英语不太好......

谢谢。

编辑

请注意,这不是问题,我将 jasmine.DEFAULT_TIMEOUT_INTERVAL 设置为 8000,但没有帮助。

【问题讨论】:

  • 但是 jsfiddle 正在工作 jsfiddle.net/9zmt8x8b
  • 它有效。尝试删除所有冗余代码并检查它
  • 感谢您的 cmets。当我在 asyncCall 方法中使用超时值时,我发现它必须小于或等于 999。从 1000 毫秒开始,就会发生所描述的错误。正如我在上面提到的,jasmine.DEFAULT_TIMEOUT_INTERVAL 设置为 8000。我是否缺少另一个值,即设置为 1000 毫秒?
  • 哦,@yurzui:出于任何原因,我无法打开 jsfiddle.net 链接;它加载和加载......
  • 好的,我想我找到了问题所在。从 angular 2 开始,我克隆了 QuickStart Seed。作为一个新手,我不知道里面最多的文件是什么,但现在我发现 jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;在 karma-test-shim.js 在我的代码中更改此值似乎没有任何效果,但在这里更改值解决了我的问题。耶! :-)

标签: javascript unit-testing angular jasmine karma-runner


【解决方案1】:

好的,我想我找到了问题所在。从 angular 2 开始,我克隆了 QuickStart Seed。

作为一个新手,我不知道里面最多的文件是用来做什么的,但现在我在karma-test-shim.js 中找到了jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;

在我的代码中更改这个值似乎没有效果,但是在这里更改值解决了我的问题。

【讨论】:

    猜你喜欢
    • 2018-06-28
    • 2014-09-03
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2011-02-15
    相关资源
    最近更新 更多