AngularJS E2E /功能测试控制器

时间:2015-06-05 08:19:09

标签: angularjs testing

我刚开始使用AngularJS中的测试。请帮我修理一下。 我的瘸子

angular.module('test', [])
.controller('ctrl', ['$scope', 'svc', function ($scope, svc) {
  $scope.data = [];
  svc.query()
  .then(function (data) {
    $scope.data = data;
  });
}]);

和测试规范

describe('ctrl', function () {
  var ctrl, scope, svc, def, data = [{name: 'test'}];
  beforeEach(module('test'));
  beforeEach(inject(function($controller, $rootScope, $q) {
    svc = {
      query: function () {
        def = $q.defer();   
        return def.promise;
      }
    };
    var a=jasmine.createSpy(svc, 'query');
    scope = $rootScope.$new();
    controller = $controller('ctrl', {
      $scope: scope,
      svc: svc
    });
  }));
  it('should assign data to scope', function () {      
    def.resolve(data);
    scope.$digest();
    expect(svc.query).toHaveBeenCalled();
    expect(scope.data).toBe(data);
  });
});

失败:错误:期待间谍,但得到了功能。在http://cdn.jsdelivr.net/jasmine/2.0.0/jasmine.js(第2125行)。你能帮我吗

2 个答案:

答案 0 :(得分:1)

您收到该错误是因为它的expect方法失败了。期望方法是期待一个间谍被传入,但不是。要解决此问题,请执行以下操作:

grep

答案 1 :(得分:0)

你正在使用createSpy()创建一个间谍,它会返回一个你可以侦察的功能,但你现在就使用它了。你的生活比现在更复杂。让angular注入真实服务,并监视其query()函数。另外,使用$ q.when()创建一个已解决的promise。

describe('ctrl', function () {
  var scope, svc;
  var data = [{name: 'test'}];

  beforeEach(module('test'));
  beforeEach(inject(function($controller, $rootScope, $q, _svc_) {
    svc = _svc_;
    spyOn(svc, 'query').andReturn($q.when(data));

    scope = $rootScope.$new();
    $controller('ctrl', {
      $scope: scope,
    });
  }));

  it('should assign data to scope', function () {      
    scope.$digest();
    expect(svc.query).toHaveBeenCalled();
    expect(scope.data).toBe(data);
  });
});