如何对Angular服务与$ cookies的交互进行单元测试?

时间:2013-11-27 08:11:53

标签: unit-testing angularjs cookies karma-runner angularjs-service

我目前有一项服务取决于$ cookies中设置的变量。但是,当我想要对服务和$ cookies中存储的值之间的交互进行单元测试时,则在实际初始化$ cookie值之前始终初始化服务。

所以,我的问题是:如何正确地测试服务和$ cookie值之间的交互? (例如:如何在我的服务初始化之前设置$ cookies中的值?)

注意:我使用Angular 1.2和Karma进行单元测试。

2 个答案:

答案 0 :(得分:6)

我在JSFiddle中创建了一个示例,希望能帮助您解决问题。

link

//--- CODE --------------------------
angular.module('myapp.test', [], function () {

}).controller('testcont', function($scope, $cookies) {
    // Read a cookie and do something with it
    $scope.favoriteCookie = $cookies.myFavorite;
});

// --- SPECS -------------------------

describe('controllers', function(){
  var scope;   
  beforeEach(angular.mock.module('ngCookies', 'myapp.test'));   
  beforeEach(inject(function($controller, $rootScope, $cookies){    
    // Setting a cookie for testing
    $cookies.myFavorite = 'oatmeal';
    scope = $rootScope.$new();
      $controller('testcont', {$scope:scope, $cookies: $cookies});
  }));

  it('sets the cookie on the scope', function(){
      expect(scope.favoriteCookie).toBe('oatmeal');      
  });
});

答案 1 :(得分:2)

我找到的唯一可以使用服务(与控制器相对)的方法是在$cookieStore中设置的模块中使用beforeEach上的装饰器。

anagular-mocks让我们以与在代码中类似的方式在规范中配置我们的模块,除了不使用config函数,我们将函数作为第二个参数传递给{{我们用来在jasmine中调用模块的函数。

看起来像这样:

module