异步测试jasmine超时错误

时间:2017-01-25 10:23:40

标签: javascript asynchronous jasmine

我已经阅读并尝试过在茉莉花中进行异步测试的不同内容,但没有任何成功。 jasmine: Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL

Testing window.postMessage directive

Testing postMessage with Jasmine async doesn't work

我有以下代码,并且我收到了以下输出。

  

在指定的超时时间内未调用异步回调   jasmine.DEFAULT_TIMEOUT_INTERVAL

    describe('asynchronous tests', function () {
        var value;

        beforeEach(function (done) {
            spyOn(myService.$rootScope, '$broadcast').and.callFake(function(){
                done();
            });
            window.parent.postMessage({message:'event'}, '*');
        });

        it('Should support async execution test preparation and expectation', function(){
            expect(myService.$rootScope.$broadcast).toHaveBeenCalled();
        });
    });

myService在父描述函数中定义。据我所知,我的beforeEach应该等到postMessage被抛出然后继续执行,但是我得到了超时错误。

由于

1 个答案:

答案 0 :(得分:1)

最后我简化了测试。我使用eventDispatcher手动触发我的服务正在侦听的事件并忘记window.postMessage()。原因是我测试的是服务而不是沟通,因此事件的来源并不重要。

it('my test', function(){
    var event = new CustomEvent('message');
    event.origin = 'http://localhost:33333';
    event.data = {message: 'eventData'};
    spyOn(myService.$rootScope, '$broadcast');
    myService.subscribeEvent();
    window.dispatchEvent(event);
    expect(myService.$rootScope.$broadcast).toHaveBeenCalledWith('eventData',undefined);
});