我的Sinon存根没有出现在我的Angular服务中

时间:2014-02-11 16:06:19

标签: jasmine sinon

我正在尝试测试Angular服务。我有一个名为keys的常量。我试图模仿这个常数,但我继续得到真正的常数。这是我的测试:

  describe('getSuperheroes()', function() {
    var mockKeys;
    beforeEach(function() {
      mockKeys = sinon.stub({apikey: 'test'});
      module(function($provide) {
        $provide.value('keys', mockKeys);
      });
    });
    it('should populate superheroes[] with result from get()', inject(function(superheroService, $httpBackend) {
      expect(superheroService.superheroes).toBeNull();
      $httpBackend.when('GET', 'http://gateway.marvel.com/v1/public/characters?apikey=test').respond({
        data: {
          results: 100
        }
      });
      superheroService.getSuperheroes();
      $httpBackend.flush();
      expect(superheroService.superheroes).toBe(100);
    }));

这是我的keys模块:

angular.module('marvelApp').constant('keys', {
  apikey: 'vip number'
});

这是我的服务:

angular.module('marvelApp').factory('superheroService', function($resource, $q, keys) {
  return {
    superheroes: null,
    getSuperheroes: function() {
      var deferred = $q.defer();
      var that = this;
      if(this.superheroes) {
        deferred.resolve(that.superheroes);
      } else {
        this.getResource().get({
          apikey: keys.apikey
        }, function(data) {
          that.superheroes = data.data.results;
          deferred.resolve(data.data.results);
        });
      }
      return deferred.promise;
    },
    ...
  };
});

我在测试中做错了什么,不允许我嘲笑keys模块。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

问题是我使用$provide提供给我的错误方法。当正确的函数应该是$provide.value()时,我正在尝试$provide.constant(),因为我试图模拟一个常量。容易腻。