在上一次异步测试完成之前,Jasmine在console.error测试中失败

时间:2017-07-24 16:29:52

标签: javascript angularjs unit-testing asynchronous jasmine

在我的测试中,我有两个测试。一个是异步,另一个是console.error。我将Jasmine作为^ 2.5.3,并在chrome 44.0.2403上进行测试。

第一次测试看起来像这样

describe('Async test', function() {
    const config = {'foo':'bar'};
    let $rootScope = false;
    beforeEach( module('my.lovely.async') );
    function createService( config ) {
        let createdService = false;
        module( $provide => $provide.constant("config", config);
        inject( ( $injector, _$rootScope_ ) => {
            createdService = $injector.get("MyAsyncService");
            $rootScope = _$rootScope_;
        })
        return createdService;
    }
    it("should do async stuff", done => {
        createService(config).doAsync().then( data => {
            expect(data.awesome).toContain("foo"); // <=== ref point 1
        });
        $rootScope.$digest();
        done()
    });
});

这对它自己来说运行得很好。

接下来的测试是:

describe('console.error test', function() {

    let DebugService = false;
    beforeEach( function(){
        module('my.app');
        module('my.debug.module');
        inject( ( $injector, _$rootScope_ ) => {
            DebugService = $injector.get("DebugService");
            $rootScope = _$rootScope_;
        })
    });

    it("should log errors", function() {
        spyOn(console, "error").and.callThrough();
        console.error("Banana"); // <=== ref point 2
        expect(DebugService.getErrors()).toContain("Banana")
    });
});

在我的app.module('my.app').config(....).run(...)代码中,运行块会覆盖console.error调用,以便它也会转到DebugService.error。一个片段在这里:

App.run(['DebugService', function(DebugService){
    var consoleError = console.error;
    console.error = function (message) {
        consoleError.call(console, message);
        DebugService.error(message);
    };
})

我所看到的是,当业力在第一次测试中到达ref point 1时,按下&#39;按钮在第二个ref point 2处结束,然后在ngMocks中进入module.$$afterEach功能。跳到module.$$cleanUp看起来我已经在第二次测试了。

我无法判断第一个测试是否没有正确执行它的异步,或者第二个测试的console.error是否未通过测试。

如何让两个测试都运行?

0 个答案:

没有答案