我试图在一个模块中对控制器代码进行单元测试,该模块将其他模块作为依赖项,但是无法弄清楚如何正确地模拟它们.
我正在使用Jasmine Framework并使用Karma(Testacular)运行我的测试.
模块代码
var app = angular.module('events', ['af.widgets', 'angular-table']);
app.controller('eventsCtrl', function([dependencies]){
    $scope.events = [];
    ...
});
规格代码
describe('events module', function(){
    var $scope,
        ctrl;
    beforeEach(function(){
        angular.mock.module('af.widgets', []);
        angular.mock.module('angular-table', []);
        module('events', ['af.widgets', 'angular-table']);
    });
    beforeEach(inject(function($rootScope, $controller){
        $scope = $rootScope.new();
        ctrl = $controller('NameCtrl', {
            $scope: $scope,
        });
    }));
    it('should have an empty events array', function(){
        expect($scope.events).toBe([]);
    })
});
我得到的错误是Karma是"没有模块af.widgets",所以显然我并没有正确地模仿模块依赖.任何提示?
我正在测试服务A,但服务A依赖于服务B(即服务B注入服务A).
我已经看到了这个问题,但我的情况有点不同,因为在我看来,模拟服务B而不是注入服务B的实际实例更有意义.我用茉莉花间谍嘲笑它.
这是一个示例测试:
describe("Sample Test Suite", function() {
  beforeEach(function() {
    module('moduleThatContainsServiceA');
    inject([
      'serviceA', function(service) {
        this.service = service;
      }
    ]);
  });
  it('can create an instance of the service', function() {
    expect(this.service).toBeDefined();
  });
});
我得到的错误是:
错误:未知提供者:serviceBProvider
我怎么能这样做?
我正在尝试学习如何为AngularJS编写单元测试.我从一开始就开始了
angular.module( ... ).config( ... )
我想测试内部配置是什么.以下是相关部分的外观:
angular.module('ogApp', ['ngCookies','ui.router','ogControllers','ogServices','ogDirectives','ogMetricsData'])
.config([
  '$stateProvider', '$locationProvider',
  function ($stateProvider, $locationProvider) {
    $stateProvider.
      state('login', {
        templateUrl: 'connect.html'
      }).state('addViews', {
        templateUrl: 'add-views.html'
      }).state('dashboard', {
        templateUrl: 'dashboard.html'
      });
    $locationProvider.
      html5Mode(true).
      hashPrefix('!');
  }
]);
我认为测试这段代码的最简单方法是为$stateProvider和注入模拟$locationProvider.然后执行配置阶段.在那之后,断言如何$stateProvider和$locationProvider应该看起来像.
如果我的想法是正确的,我的问题是,我不知道如何将这些模拟注入模块并从测试中执行其配置阶段.
你能告诉我如何测试这段代码吗?
我正在使用AngularJS'$资源来获取和更新对象.为了在页面加载时保存往返,我在页面上的变量中有JSON对象.如何用这些数据初始化$ resource而不是调用$ get?
myApp.run([
  '$rootScope', 'userService', function($rootScope, userService) {
    return userService.isAuthenticated().then(function(response) {
      if (response.data.authenticated) {
        return $rootScope.$broadcast('login', response.data);
      } else {
        return userService.logout();
      }
    });
  }
]);
那是我在init.js文件中的代码.我怎样才能对此进行单元测试?
我们有一个我们称之为a的东西CORShttpService,它基本上是一个服务器的包装器$http,但封装了我们需要的一些CORS功能.我现在正在为CORShttpService注入其中的服务编写一些测试.此服务的代码如下:
CORShttpService({method: requestMethod, url: getUrl(path), data: data}).
    success(function(data, status, headers) {
        //do success stuff
    }).
    error(function(data, status, headers) {
       //do error stuff
    });
我想嘲笑电话CORShttpService,但我不知道如何去做.我正在使用Jasmine,它的spyOn功能需要一个对象来模拟对象上的函数.我CORShttpService没有任何对象,所以我不知道怎么去嘲笑它.是的,我可以$httpBackend用来模拟最终设置的请求CORShttpService,但我不希望它首先进入该服务.我想隔离单元测试并简单地模拟外部调用.有什么方法可以嘲笑这个只是一个功能的服务吗?