Angular 7 Testing - Асинхронный вызов функции + async..await - PullRequest
0 голосов
/ 03 марта 2019

В модульном тесте Angular 7 есть ли способ избежать двойного синтаксиса async( async(){} ) при объединении асинхронной поддержки с ключевыми словами async..await?

Я новичок в angular, но я опытныйпрограммист, и у меня проблемы с посадкой на мой предпочтительный стиль тестирования.

Я хотел бы безопасно использовать async..await в тестах, и я понимаю синтаксис ниже.Однако при обучении разработчиков новым для современного javascript и / или концепции async..await двойной синтаксис async(async()) является избыточным и вводящим в заблуждение.Они оставляют внешний асинхронный.Исключения, возникающие в службе, приводят к тому, что сообщения о сбоях выходят за пределы фактического теста, который трудно отследить.

Кажется, что одно из следующего было бы лучше:

  1. it() должно магически поддерживать async..await и обернуть мой обратный вызов в async(), чтобы у меня не былочтобы подумать об этом.
  2. it() должен принимать необязательный параметр функции (т. е. async или fakeAsync), который обернет мой обратный вызов.
  3. it() вариаций ita()и itfa() должен существовать, который обернет мой обратный вызов соответствующим асинхронным помощником.
  4. it() обернет мой обратный вызов async, а дополнительный itf() обернет мой обратный вызов в fakeAsync.

Мне не хватает существующей концепции или синтаксиса?Есть ли лучшая альтернатива?

    import { async } from '@angular/core/testing';

    describe('MyService', () => {
        let service: MyService;

        ...

        it('should get data', async( async() => {
            // arrange
            let expectedData = { answer: 42 };

            // act
            let data = await service.getDataAsync();

            // assert
            expect(data).toEqual(expectedData);
        } ));
    })
...