Как выполнить модульный тест, если оператор возврата ввел блок catch в AngularJS? - PullRequest
0 голосов
/ 09 января 2020

У меня есть этот код:

function load() {

    return this.doSomething()
        .catch(function() {
            return doOtherThing();
        });
}

Функции doSomething () и doOtherThing () находятся в одном сервисе. Код должен работать так, что при первом вызове функции загрузки он достигает оператора catch (и функции doOtherThing). Во второй раз, когда вызывается load (), он должен возвращать значение при выполнении doSomething ().

Я хочу написать модульный тест, который сообщит мне, был ли введен catch block / doOtherThing в операторе return. Вот моя попытка:

it('test it', function() {
    spyOn(this.service, 'load').andCallThrough();
    spyOn(this.service, 'doSomething').andCallThrough();
    spyOn(this.service, 'doOtherThing').andCallThrough();

    this.service.load('');
    this.$rootScope.$apply();

    expect(this.service.load.callCount).toBe(1);
    expect(this.service.doSomething).toHaveBeenCalled();
    expect(this.service.doSomething.callCount).toBe(1);
    expect(this.service.doOtherThing).toHaveBeenCalled();
    expect(this.service.doOtherThing.callCount).toBe(1);

    this.service.load();
    this.$rootScope.$apply();

    expect(this.service.load.callCount).toBe(2);
    expect(this.service.doSomething.callCount).toBe(2);
    expect(this.service.doOtherThing.callCount).toBe(1);
});

Однако я получаю то, что doOtherThing никогда не вызывается / callCount всегда равен 0.

Я проверил, что:

В функции load: добавление «this» перед doOtherThing () ничего не изменит. Удаление «this» из doSomething () вызывает ошибку, при которой doSomething () также никогда не вызывается / callCount 0.

В тесте: изменение применения к дайджесту ничего не меняет.

...