【问题标题】:jasmine 2.0 testing angularjs factory method which returns a promise茉莉花 2.0 测试返回承诺的 angularjs 工厂方法
【发布时间】:2015-02-06 09:05:33
【问题描述】:

当我尝试测试返回承诺的函数时,我收到以下错误:

“错误:超时 - 未在超时内调用异步回调 由 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定。

"

我的规格如下:

describe('async promise test', function () {

    beforeEach(module('app'));

    beforeEach(function () {
         jasmine.DEFAULT_TIMEOUT_INTERVAL = 6 * 1000;
    })

    it('should match the name', function (done) {
        inject(function ($rootScope,promiseTest) {
          $rootScope.$apply(function(){
             var promise =promiseTest.checkPromise();
            promise.then(function(data){
           console.log(data);
           done();
          })
        })
      })
    })
});

完整代码请查看 plunker 链接plunker link

【问题讨论】:

    标签: javascript angularjs jasmine jasmine-async


    【解决方案1】:

    您正在使用 mock 模块,它覆盖了 $timeout,因此测试是可重复的 (ref)!

    你必须使用$timeout.flush(1000);(而$apply()是多余的):

    it('should match the name', function (done) {
      inject(function (promiseTest,$timeout) {
        var promise =promiseTest.checkPromise();
        promise.then(function(data){
          console.log(data);
          done();
        });
        $timeout.flush(1000);
      });
    });
    

    查看分叉的 plunk:http://plnkr.co/edit/J1EmU7yuCETBd8w9mS1R?p=preview

    【讨论】:

      【解决方案2】:

      您必须将 $timeout 注入您的测试,然后刷新它:

       inject(function ($rootScope,promiseTest, $timeout) {
            $rootScope.$apply(function(){
               var promise =promiseTest.checkPromise();
               console.log("Created promise")
              promise.then(function(data){
             console.log(data);
             done();
            })
          });
          $timeout.flush();
      

      在此处查看修改后的 plunker:

      http://plnkr.co/edit/psBl6nROkXHrD1iExKAQ?p=preview

      【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多