在异步“beforeAll”调用完成之前调用Jasmine spec“it”

时间:2017-03-03 13:10:58

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

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

版本:

  • Jasmine:2.4.1
  • 业力:1.5.0
  • Chrome: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,但它没有帮助。

1 个答案:

答案 0 :(得分:0)

好的,我想我找到了问题。首先从角度2开始,我克隆了快速入门种子。

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

在我的代码中更改此值似乎没有任何效果,但是在此处更改该值解决了我的问题。