AngularJS E2E/功能测试 Controller

标签 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);
  });
});

它失败了:错误:需要一个 spy ,但得到了函数。在 http://cdn.jsdelivr.net/jasmine/2.0.0/jasmine.js (第 2125 行)。你能帮帮我吗

最佳答案

您收到该错误是因为它在 expect 方法上失败。 expect 方法期望传入一个 spy ,但实际上没有。要解决此问题,请执行以下操作:

spyOn(svc, 'query').andCallThrough();

关于AngularJS E2E/功能测试 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661665/

相关文章:

javascript - Angularjs 从 url 获取 Json

javascript - 单元测试中的 Angular 1.x 服务注入(inject)

javascript - 如何保护 MP3 URL?

jQuery 选择器性能 : a curious case

ruby - 我怎样才能让工作服忽略我的 gem 作为依赖项的 gem 中的代码?

testing - 使用多个 `--tests`

css - 如何使用ng-animate在菜单上添加滑动效果

javascript - 是否可以从其他 javascript 调用模块工厂

testing - junit 测试方法的正确命名约定

selenium - 机器人框架 - Selenium2Library - Chrome 和 Edge 打开新标签而不是窗口