AngularJS; Ожидаемый шпионский meldError вызывался с: ... но он никогда не вызывался - PullRequest
0 голосов
/ 09 марта 2020

У меня есть функция '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 вызван с: ... но он никогда не вызывался», хотя шпион был вызван функцией?

...