Zrobiłem prosty demo fabryki i próbuję przetestować to używając jaśminu. Jestem w stanie uruchomić test, ale używam metody spyOn. Wolałbym używać jasmine.createSpy lub jasmine.createSpyObj, aby wykonać ten sam test. Czy ktoś mógłby mi pomóc w refaktoryzacji mojego kodu, aby zamiast tego używać tych metod w moim przykładzie?Jak działa program createSpy w Angular + Jasmine?
http://plnkr.co/edit/zdfYdtWbnQz22nEbl6V8?p=preview
describe('value check',function(){
var $scope,
ctrl,
fac;
beforeEach(function(){
module('app');
});
beforeEach(inject(function($rootScope,$controller,appfactory) {
$scope = $rootScope.$new();
ctrl = $controller('cntrl', {$scope: $scope});
fac=appfactory;
spyOn(fac, 'setValue');
fac.setValue('test abc');
}));
it('test true value',function(){
expect(true).toBeTruthy()
})
it('check message value',function(){
expect($scope.message).toEqual(fac.getValue())
})
it("tracks that the spy was called", function() {
expect(fac.setValue).toHaveBeenCalled();
});
it("tracks all the arguments of its calls", function() {
expect(fac.setValue).toHaveBeenCalledWith('test abc');
});
})
aktualizacja
angular.module('app',[]).factory('appfactory',function(){
var data;
var obj={};
obj.getValue=getValue;
obj.setValue=setValue;
return obj;
function getValue(){
return data;
}
function setValue(datavalue){
data=datavalue;
}
}).controller('cntrl',function($scope,appfactory){
appfactory.setValue('test abc');
$scope.message=appfactory.getValue()
})
Co próbujesz osiągnąć? Z wyjątkiem drugiego 'it()', wszystkie pozostałe nie testują żadnego z twojego kodu: po prostu testują, że Jasmine działa jak udokumentowane. –
Próbuję przetestować moją fabrykę .. !! Chcę przetestować moją fabrykę za pomocą Spyona i używając jaśminu. Zgadzam się. – user944513
Jeśli celem jest przetestowanie usługi, nie trzeba tworzyć żadnego kontrolera. Wstrzyknij usługę, wywołaj jej metody i sprawdź, czy robią to, co powinni. Nie potrzebujesz żadnego szpiega, chyba że testowana usługa zależy od innych usług, które chcesz udawać/szpiegować. –