Дождитесь завершения конструктора внедренного сервиса, прежде чем выполнять тесты в Karma 4 / Angular 7 - PullRequest
0 голосов
/ 27 февраля 2019

Я внедряю сервис, подобный этому:

it('name of test', inject([ Service], (hcs: Service) => {
    const pipe = new MyPipe(hcs);
    const expectedResult = ...
    //Here the constructor of the hcs-service has to be completet, otherwise the Pipe fails
    const result = pipe.transform(...);
    expect(result).toEqual(expectedResult);
}));

Мне нужно запустить конструктор сервиса, прежде чем я начну выполнять метод преобразования моего канала.Во время выполнения это не проблема, так как этот канал всегда является реакцией на действия пользователя.Но в моих тестах он терпит неудачу, потому что конструктор еще не запущен.

Что было бы хорошим способом решить эту проблему?

Редактировать: Как указал Ариф в комментарии.Проблема в том, что мой конструктор выполняет асинхронные задачи.Спасибо:)

1 Ответ

0 голосов
/ 28 февраля 2019

Конструктор объекта всегда будет выполняться первым.Если у вас там нет асинхронного кода.

Как вы упомянули в комментариях, в вашем случае это была проблема.

Чтобы дождаться завершения проверки асинхронной функции в вашем тесте, вы должны использовать fakeAsync и tick

it('name of test', fakeAsync(inject([ Service], (hcs: Service) => {
    const pipe = new MyPipe(hcs);

    tick();

    const expectedResult = ...
    //Here the constructor of the hcs-service has to be completet, otherwise the Pipe fails
    const result = pipe.transform(...);
    expect(result).toEqual(expectedResult);
})));
...