Sto cercando di iniziare con il karma-gelsomino e mi chiedo perché questo test non riesce:AngularJS - Come verificare se una funzione viene chiamata da un'altra funzione?
it("should call fakeFunction", function() {
spyOn(controller, 'addNew');
spyOn(controller, 'fakeFunction');
controller.addNew();
expect(controller.fakeFunction).toHaveBeenCalled();
});
Nel mio controller che ho in precedenza ha installato per questo test ho il seguente:
function addNew() {
fakeFunction(3);
}
function fakeFunction(number) {
return number;
}
sia addNew
e fakeFunction
sono esposte utilizzando:
vm.addNew = addNew;
vm.fakeFunction = fakeFunction;
il test, però, non riesce con il seguente:
Expected spy fakeFunction to have been called.
posso far passare il test se chiamo la funzione da dentro il mio test. Speravo, tuttavia, di poter verificare se fakeFunction
era stato chiamato da un'altra funzione. Qual è il modo corretto per raggiungere questo obiettivo?
Aggiornamento:
//test.js
beforeEach(function() {
module("app");
inject(function(_$rootScope_, $controller) {
$scope = _$rootScope_.$new();
controller = $controller("CreateInvoiceController", {$scope: $scope});
});
});
Se testare qualcosa di simile:
it('should say hello', function() {
expect(controller.message).toBe('Hello');
});
Il test viene superato se metto il seguente nel mio controller:
var vm = this;
vm.message = 'Hello';
Voglio solo sapere come posso verificare se una funzione pubblica è stata chiamata da un'altra funzione.
Ho provato a chiamare 'vm.fakeFunction' e non funziona neanche. Come è fatto esattamente? –
@RaphaelRafatpanah Non so cosa sia 'vm', ma non è quello che stai testando, stai testando che' controller.fakeFunction' è stato chiamato – Vadim
Mi dispiace per non aver chiarito. 'vm' è una variabile comune per l'acquisizione di' this' in controller angolari. In effetti, 'vm' e' controller' dovrebbero entrambi fare riferimento a 'this'. –