Angular JS:无法在 Jasmine 中使用承诺测试服务功能

Angular JS : Not able to test service function with promises in Jasmine

这里,_fact 是对服务的引用。

 it('Git Check', function() {
     $scope.user = 'swayams'
     var data;
      _fact.Git($scope).then(function(d) {
        expect(d.data.length).toEqual(4)
     }, function() {  expect(d).not.toBeNull(); });

    });

我遇到错误

SPEC HAS NO EXPECTATIONS Git Check

更新

按照@FelisCatus 强制异步并添加 $formDigest 后,我收到了不同的错误 Error: Unexpected request: GET https://api.github.com/users/swayams/repos No more request expected

更新后的代码片段类似于 -

 it('Git Check', function(done) {
         $scope.user = 'swayams'
         var data;
          _fact.Git($scope).then(function(d) {
            expect(d.data.length).toEqual(4)
         }, function() {  expect(d).not.toBeNull(); });

        });
 $rootScope.$formDigest();

我这里有一个 Plunk 来说明这个问题。

Jasmine 没有看到您的期望,因为您的函数 returns 在任何 expect() 被调用之前。根据你的情况,你可能想要使用异步测试,或者使用一些 promise matchers.

对于异步测试,您可以向测试函数添加一个额外的参数,done

it('Git Check', function (done) {
  $scope.user = 'swayams'
  var data;
   _fact.Git($scope).then(function(d) {
     expect(d.data.length).toEqual(4);
  }, function() {  expect(d).not.toBeNull(); }).finally(done);
  $rootScope.$digest();
});

(注意 promise 链末尾的 finally 子句。)

请注意,即使您的代码未使用它,您也必须执行 $rootScope.$digest() 才能解决承诺。参见:How to resolve promises in AngularJS, Jasmine 2.0 when there is no $scope to force a digest?