У меня есть функция 'deleteDocument' в контроллере AngularJS 'DossierDetailController'
function deleteDocument(response, toastInstance) {
if (response && response === 'verwijder') {
var docInfo = documentViewerService.getCurrentDocument();
if (docInfo) {
documentService
.deleteDocument(docInfo)
.then(function () {
closeDocumentPanel();
reloadDossier();
})
.catch(function (error) {
meldingenService.meldError('Fout', 'Er is een fout opgetreden bij het verwijderen van het document "' + docInfo.docTitle , -1);
});
}
}
meldingenService.sluitMelding(toastInstance);
}
, которая тестируется с помощью теста Жасмина ниже.
it('should log an error when deleting a document fails', function (done) {
var state = {params: {dossierId: 1234000, origin: undefined}};
var contextServiceSpy = getContextServiceHasRoleSpy(true);
var dossierServiceSpy = getDossierServiceGetDossierDetailsSpy();
var sessionStateServiceSpy = getSessionstateServiceZetTabbladTekstSpy();
var actiehoudersServiceSpy = getActiehoudersServiceGetActiehoudersSpy(false);
var documentViewerServiceSpy = getDocumentViewerServiceGetCurrendDocumentSpy();
var documentServiceSpy = getDocumentServiceDeleteDocumentSpy(false);
var meldingenServiceMeldErrorSpy = getMeldingenServiceMeldErrorSpy();
var meldingenServiceSluitMelding = getMeldingenServiceSluitMeldingSpy();
var ctrl = new DossierDetailsController({state: state});
ctrl.deleteDocument('verwijder', new Object());
expect(dossierServiceSpy).toHaveBeenCalledWith(1234000);
expect(documentViewerServiceSpy).toHaveBeenCalled();
expect(documentServiceSpy).toHaveBeenCalledWith(minimalDocInfo);
expect(meldingenServiceMeldErrorSpy).toHaveBeenCalledWith('Fout',
'Er is een fout opgetreden bij het verwijderen van het document "' +
minimalDocInfo.docTitle , -1);
expect(meldingenServiceSluitMelding).toHaveBeenCalled();
done();
});
Тест успешно завершается при комментировании строк;
expect(meldingenServiceMeldErrorSpy).toHaveBeenCalledWith('Fout',
'Er is een fout opgetreden bij het verwijderen van het document "' +
minimalDocInfo.docTitle + '" voor tweede aanleg.', -1);
Если я помещаю оператор журнала в функцию deleteDocument, то перед оператором meldingenService.meldError('Fout', 'Er is een fout opgetreden bij het verwijderen van het document "' + docInfo.docTitle , -1);
отображается оператор журнала.
два соответствующих набора шпионов:
getMeldingenServiceMeldErrorSpy = function () {
return spyOn(meldingenService, 'meldError').and.callFake(function (meldingTitel, meldingTekst, meldingsDuur) {
console.log('ERRROR_LOGGED', meldingTitel, meldingTekst, meldingsDuur);
});
};
и
getDocumentServiceDeleteDocumentSpy = function (success) {
if (success) {
return spyOn(documentService, 'deleteDocument').and.callFake(function () {
return $q.resolve();
});
} else {
return spyOn(documentService, 'deleteDocument').and.callFake(function () {
return $q.reject();
});
}
};
CallFake добавлен в meldingenService.meldError только для целей отладки и также показывает, что шпион был вызван. Почему Жасмин сообщает: «Ожидается, что spy meldError вызван с: ... но он никогда не вызывался», хотя шпион был вызван функцией?