Здравствуйте, гуру 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) или реальную?
- Третий тест не должен начинаться, пока выполняется вся асинхронная работа второго теста, не так ли?
- Может быть, вы можетепереставить тесты для лучшей демонстрации ...
Ну, я сдаюсь.Я не могу найти исчерпывающую информацию об этом и буду признателен вам за любые ссылки.