Модульные тесты Jasmine для асинхронного кода: async, done, fakeAsync, простой пример - PullRequest
0 голосов
/ 05 декабря 2018

Здравствуйте, гуру JavaScript!

Я пытался создать пример для демонстрации асинхронных тестов кода различными способами: async, done, fakeAsync / tick и ни одним из них.Я не могу справиться с этим.

Цель состоит в том, чтобы понять, как async, done, fakeAsync / tick и ни один из них не работает, основываясь на влиянии одного теста на другой.

Код некоторых служб для покрытия:

  public cnt: number = 0;

  public testFunction() {
    const timeout = setInterval(() => {
      if (this.cnt++ === 15) {
        clearInterval(timeout);
      }
    }, 1000);
  }

Код модульных тестов:

  describe('testfunction', () => {
    it('#testFunction done', (done) => {
      console.info(service.cnt);  // 0
      service.testFunction();
      const timeout = setTimeout(() => {
        console.info(service.cnt);
        done();  
      }, 5000);
    });

    it('#testFunction async', async(() => {
      console.info(service.cnt);     // 6?
      service.testFunction();
      const timeout = setTimeout(() => {
         console.info(service.cnt);
      }, 3000);
    }));

    it('#testFunction none', () => {
      console.info(service.cnt);     // 6?
      service.testFunction();
      const timeout = setTimeout(() => {
        console.info(service.cnt);
      }, 3000);
    });

    it('#testFunction fakeAsync', fakeAsync(() => {
      // service.cnt = 0;          // works ok with it
      console.info(service.cnt);  
      service.testFunction();
      tick(3000);
      console.info(service.cnt);  
      tick(13000);
      console.info(service.cnt);  
    }));
  });
  • Первый тест не удался: «Тайм-аут - асинхронный обратный вызов не был вызван в течение времени ожидания, указанного в jasmine.DEFAULT_TIMEOUT_INTERVAL».Будет ли остановлена ​​асинхронная работа в тесте?Что происходит с очередью макросов с помощью done?Используем ли мы очередь фальшивых макрозадач (как это делает fakeAsync) или реальную?
  • Третий тест не должен начинаться, пока выполняется вся асинхронная работа второго теста, не так ли?
  • Может быть, вы можетепереставить тесты для лучшей демонстрации ...

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

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