我正在尝试测试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
模块。谢谢你的帮助。
答案 0 :(得分:1)
问题是我使用$provide
提供给我的错误方法。当正确的函数应该是$provide.value()
时,我正在尝试$provide.constant()
,因为我试图模拟一个常量。容易腻。