2016-08-12 64 views
1

我正试图在我注入到我的应用程序的单独库中测试承诺。如何在茉莉花中运行Promise测试

function myFunc(input) { 
 
     return new Promise(function(resolve, reject) { 
 
      ··· 
 
      resolve(value); // success 
 
      ··· 
 
      reject(error); // failure 
 
     }); 
 
    };

这是我的函数返回一个承诺。

我会认真爱茉莉运行测试这样

describe('Service: myService', function() { 
 
    var $log; 
 

 
beforeEach(inject(function (_$log_) { 
 
    $log = _$log_; 
 
})); 
 

 
it('should get results', function() { 
 
    $log.log("start test"); 
 

 
    var self = this; 
 
    myFunc(input).then(function(response) { 
 
      $log.log("success"); 
 
      expect(response).toBe("response"); 
 
      done(); 
 
    }).catch(function(error) { 
 
      $log.log("fail"); 
 
      self.fail(error); 
 
      done(); 
 
    }); 
 
    $log.log("end test"); 
 
}); 
 
});

我的测试通过(不预期),并在我的日志中的唯一的事情就是[开始测试]和[结束测试]就好像这个承诺完全被忽略了一样。 因为我没有使用$ q来承诺,所以大多数茉莉花提示角度似乎没有帮助。

关于如何进入'那么'的任何想法?

感谢

回答

0

我可能是错在这里,但是这很可能是因为您正试图在这里测试异步进程。所以基本上发生的事情是,你调用函数,但是测试会继续运行并在promise返回之前结束,这就是测试成功的原因。

解决方法之一(这更像是一个黑客,我敢肯定有更好的方法来做到这一点,如果我找到它,我会编辑这篇文章)是添加这一点的代码在测试结束:

describe("baseline test",function(){ 
    it("baseline",function(done){ 
     setTimeout(function(){ 
      expect(1).toEqual(1); 
      done(); 
     },1000);  
    }); 
}); 

本质上讲这确实片段只是设置1秒等待任何异步超时调用回调。如果1秒不够,则可以始终增加1000(以毫秒为单位)。如果这不起作用,也许会考虑添加另一个测试套件,直到承诺返回时才会完成。

+0

谢谢。我试过这个,但现在我得到超时错误。我认为线程会以某种方式丢失。还在搞清楚。 – Jade