#angular #testing
#angular #тестирование
Вопрос:
Все примеры, которые я нашел до сих пор tick()
, связаны с тем, что таймер находится в одном и том же fakeAsync
.
Подумайте, что у вас есть какая-то инициализация, которая включает setTimeout
в себя, и вы хотели бы ввести ее beforeEach()
и продвинуть часы в it()
. Я не могу сделать это, используя только angular: (
Пожалуйста, взгляните на приведенные ниже примеры. Для простоты «инициализация» состоит из простого setTiemout
. Любые советы или более глубокие объяснения tick
неправильного поведения и, если есть способ его преодолеть, будут высоко оценены.
Это всегда терпит неудачу, вообще не может увеличить время:
describe("counter1", () => {
let counter = 0;
beforeEach(() => {
setTimeout(()=> counter, 10);
});
it("is incremented", fakeAsync(() => {
expect(counter).toBe(0); // TRUE
tick(50);
expect(counter).toBe(1); // FALSE; tick() can not advance the timer when it is outside the current fakeAsync
}));
});
Это похоже на приведенное выше, но, кроме того, есть Error: 1 timer(s) still in the queue.
то, от чего я не могу избавиться из fakeAsync
-за beforeEach
describe("counter1fakeAsync" , () => {
let counter = 0;
beforeEach(fakeAsync(() => {
setTimeout(()=> counter, 10);
}));
it("is incremented", fakeAsync(() => {
expect(counter).toBe(0); // TRUE
tick(50);
expect(counter).toBe(1); // FALSE; tick() can not advance the timer when it is outside the current fakeAsync
// Even more you cannot get rid of `Error: 1 timer(s) still in the queue.`
}));
});
Это работает, все примеры в Интернете выглядят так:
describe("counter2", () => {
let counter = 0;
it("is incremented", fakeAsync(() => {
setTimeout(()=> counter, 10);
expect(counter).toBe(0); // TRUE
tick(50);
expect(counter).toBe(1); // TRUE; tick() can advance the timer if it is in the same fakeAsync
}));
});
jasmine.clock() также работает:
describe("counter3", () => {
let counter = 0;
beforeEach(() => {
jasmine.clock().uninstall(); // NEEDED :( or try with __zone_symbol__fakeAsyncPatchLock
jasmine.clock().install();
setTimeout(()=> counter, 10);
});
afterEach(() => {
jasmine.clock().uninstall();
});
it("is incremented", () => {
expect(counter).toBe(0); // TRUE
jasmine.clock().tick(50);
expect(counter).toBe(1); // TRUE; jasmine.clock().tick() just works as expected
});
});