【问题标题】:How to test promise in jasmine & karma如何在茉莉和业力中测试承诺
【发布时间】:2015-09-19 13:05:24
【问题描述】:

我有一个测试用例如下:

it("Should have a valid structure", function(done){ 

    var data;
    module(APP_MODULE_NAME);

    inject(function(_metaService_){
        metaService = _metaService_;            
    });

    metaService.fetchEntityMeta('person').then(function(data){
        expect(data.status).toBe( true );
        done();
    });

});

但我收到以下错误:

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

我增加了 jasmine.DEFAULT_TIMEOUT_INTERVAL 但没有使用。 但是下面的代码确实有效。

    setTimeout(function(){
        expect(true).toBe(true);
        done();
    }, 5000);

所以,我的理解是我的承诺有问题。 我的问题是如何检查 promise 返回的数据。

【问题讨论】:

  • 提供您的服务代码..

标签: angularjs unit-testing tdd jasmine karma-jasmine


【解决方案1】:

您没有在测试中的任何地方调用done() 回调。将最后一条语句更改为

metaService.fetchEntityMeta('person').then(function(data) {
    expect(data.status).toBe(true);
    done();
});

另一种选择是

metaService.fetchEntityMeta('person').then(function(data) {
    expect(data.status).toBe(true);
}).then(done);

【讨论】:

  • 我的错,现在我得到:错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。改变 jasmine.DEFAULT_TIMEOUT_INTERVAL 并没有帮助。
  • 你的断言通过了吗?即data.status实际上是否等于true?
  • 另外,以上哪种方法不适合你?还是两者兼而有之?
  • 上述两种方法都给出相同的错误。 & data.status 为真。它是从模拟响应发送的。需要注意的另一件事是执行根本没有访问 then() 块。
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多