如何测试AngularJS服务中是否设置了$cookie?

如何测试AngularJS服务中是否设置了$cookie?,angularjs,unit-testing,cookies,karma-runner,Angularjs,Unit Testing,Cookies,Karma Runner,我的服务是: myApp.service('userService', [ '$http', '$q', '$rootScope', '$state', '$cookies', '$base64', function($http, $q, $rootScope, $state, $cookies, $base64) { var user; user = {}; this.logout = function() { user = {}; del

我的服务是:

myApp.service('userService', [
  '$http', '$q', '$rootScope', '$state', '$cookies', '$base64', function($http, $q, $rootScope, $state, $cookies, $base64) {
    var user;
    user = {};

    this.logout = function() {
      user = {};
      delete $cookies.userAccessKey;
      return $state.transitionTo('login');
    };
  }
]);

我想编写一个单元测试,以确保删除了
$cookies.userAccessKey
。我该怎么做?当我进行此操作时,如何确保
user
设置为空?

要检查用户是否为空,只需添加一个公共getter或checker:

myApp.service('userService', [
  '$http', '$q', '$rootScope', '$state', '$cookies', '$base64', function($http, $q, $rootScope, $state, $cookies, $base64) {
    var user;
    this.user = {}; // or a method this.isLoggedIn() for more security

    this.logout = function() {
      this.user = {};
      delete $cookies.userAccessKey;
      return $state.transitionTo('login');
    };
  }
]);
然后,在测试中:

describe('logout', function(){
    beforeEach(function(){
        userService.login(); //relog before each test
    });

    it('should remove the userAccessKey from cookie', function() {
        userService.logout();

        inject(function($cookies) {
          expect(cookies.userAccessKey).toBeUndefined();
        });
    });

    it('should reset user object', function() {
        userService.logout();

        expect(userService.user).toEqual({});
        });
    });
});