Ожидаемые шпионы не будут вызваны на внутреннюю функцию - PullRequest
1 голос
/ 25 апреля 2019

Я пишу приложение с AngularJS. Я пишу юнит-тесты для моего углового служения с кармой и жасмином. Он не работает должным образом, так как юнит-тесты продолжают выдавать мне следующие ошибки:

Ожидается, что шпионская фотография будет вызвана.

Вот мой код с ошибкой: https://codepen.io/aubz/pen/zXyvbj

Вот фрагмент кода моего модульного теста:

  it('should process the plain clocking settings', function () {

    ClockingRecordTypeFactory.getRecord('plain', 'here', null, null, null, null, null);

    spyOn(ClockingRecordTypeFactory, 'plain').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'photo').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'geo').and.callFake(function () {});
    spyOn(ClockingRecordTypeFactory, 'manual').and.callFake(function () {});

    expect(ClockingRecordTypeFactory.plain).toHaveBeenCalled();
    expect(ClockingRecordTypeFactory.photo).not.toHaveBeenCalled();
    expect(ClockingRecordTypeFactory.geo).not.toHaveBeenCalled();
    expect(ClockingRecordTypeFactory.manual).not.toHaveBeenCalled();

});

и функции, которую я пытаюсь проверить:

function getRecord(type, origin, coords, imageData, comments, reason, date) {

    var record = getBaseClockingRecord();

    if (type === 'plain') {
        plain(record);
    }

    if (type === 'photo') {
        photo(record);
    }

    if (type === 'geo') {
        geo(record, coords);
    }

    if (type === 'manual') {
        manual(record);
    }

    return record;
}

1 Ответ

1 голос
/ 25 апреля 2019

Тест шпионит за ClockingRecordTypeFactory.plain, но на самом деле функция getRecord вызывает локальную функцию plain, поэтому шпион не будет вызван вообще.

Вы можете заставить шпионов работать так, как задумано:изменение getRecord следующим образом:

if (type === 'plain') {
    this.plain(record);
}

if (type === 'photo') {
    this.photo(record);
}

if (type === 'geo') {
    this.geo(record, coords);
}

if (type === 'manual') {
    this.manual(record);
}

Также вам необходимо настроить шпионов в начале теста перед вызовом getRecord:

spyOn(ClockingRecordTypeFactory, 'plain').and.callFake(function () {});
spyOn(ClockingRecordTypeFactory, 'photo').and.callFake(function () {});
spyOn(ClockingRecordTypeFactory, 'geo').and.callFake(function () {});
spyOn(ClockingRecordTypeFactory, 'manual').and.callFake(function () {});

ClockingRecordTypeFactory.getRecord('plain', 'here', null, null, null, null, null);

Обновлен Codepen

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...