Próbuję zacząć z karma-jaśminu i zastanawiam się, dlaczego ten test nie powiedzie się:AngularJS - Jak sprawdzić, czy funkcja jest wywoływana z poziomu innej funkcji?
it("should call fakeFunction", function() {
spyOn(controller, 'addNew');
spyOn(controller, 'fakeFunction');
controller.addNew();
expect(controller.fakeFunction).toHaveBeenCalled();
});
W moim kontrolera, że już wcześniej utworzonej w tym teście Mam następujący:
function addNew() {
fakeFunction(3);
}
function fakeFunction(number) {
return number;
}
zarówno addNew
i fakeFunction
narażone są na podstawie:
vm.addNew = addNew;
vm.fakeFunction = fakeFunction;
testy, jednak nie powiedzie się z następujących czynności:
Expected spy fakeFunction to have been called.
mogę przepustkę testową gdybym wywołać funkcję z poziomu mojego testu. Miałem jednak nadzieję, że mogę przetestować, czy fakeFunction
został wywołany przez inną funkcję. Jaki jest właściwy sposób, aby to osiągnąć?
Aktualizacja:
//test.js
beforeEach(function() {
module("app");
inject(function(_$rootScope_, $controller) {
$scope = _$rootScope_.$new();
controller = $controller("CreateInvoiceController", {$scope: $scope});
});
});
Gdybym przetestować coś takiego:
it('should say hello', function() {
expect(controller.message).toBe('Hello');
});
Test przechodzi jeżeli kładę następujących w moim kontrolera:
var vm = this;
vm.message = 'Hello';
po prostu chcę wiedzieć jak mogę sprawdzić, czy funkcja publiczna została wywołana z innej funkcji.
Próbowałem wywoływać 'vm.fakeFunction' i to też nie działa. Jak dokładnie to robi? –
@RaphaelRafatpanah Nie wiem, czym jest 'vm', ale to nie jest to, co testujesz, testujesz, że' controller.fakeFunction' został nazwany – Vadim
Przepraszamy za nie wyjaśnienie. 'vm' jest wspólną zmienną do przechwytywania' this' w kontrolerach Angular. W efekcie 'vm' i' controller' powinny odnosić się do 'this'. –