Karma, açısal ve mocha kullanıyorum.Bir hizmetin bağımlılığını açısal birim testimde nasıl alayım?
MyServices
modülü Enjekte etmek istiyorum. Aynı addThing
yöntem ayrıca $localStorage
sağlayıcı çağırır ve ben $localStorage.setItem
yöntem örtük İşte benim kod ben MyServices.addThing(data)
çağırdığınızda anılmış test etmek istiyorum: Ben çalıştırdığınızda
describe('MyServices', function() {
var $q;
var $rootScope;
var $scope;
var MyServices;
var $timeout;
var $httpBackend;
// inject modules
beforeEach(function(){
module('my.stuff');
var _LocalStorage_ = {
setItem: function(){
return 'foo';
}
};
// mock the dependencies of the module we are testing
module(function ($provide) {
$provide.value('$localStorage', _LocalStorage_); //here is where the error occurs
});
});
beforeEach(inject(function (_$q_, _$rootScope_, _$timeout_, _MyServices_, _$httpBackend_) {
$q = _$q_;
$rootScope = _$rootScope_;
$timeout = _$timeout_;
MyServices = _MyServices_;
$httpBackend = _$httpBackend_;
$scope = $rootScope.$new();
}));
it.only('should call a method and access localStorage', function(){
var spyAdd = sinon.spy(MyServices, 'addThing');
var spySetItem = sinon.spy($localStorage, 'setItem');
MyServices.addThing({ name: 'Thing' });
expect(spyAdd.callCount).to.equal(1);
expect(spySetItem.callCount).to.equal(1);
})
});
bir hata $localStorage
olsun tanımlanmamış.
Okuduğum tüm örnekler bunu böyle yapmak için söylüyor. – chovy
sizin için çalışıyor mu? ya da bu şekilde sevmiyor musun? – sdfacre
, enjeksiyon için mevcut değildir, çünkü MyServices enjeksiyonundan farklı bir ad alanındadır. İsim alanını yüklediysem 100 şey gibi alay etmeliyim. Bu yüzden sadece varlığını $ offer.value ('$ localStorage', myMock) ' – chovy