используя угловое тестирование fakeAsync с помощью jest it.each - PullRequest
1 голос
/ 10 июня 2019

Используя Angular 8, @ angular-builders / jest 8.0.2, jest 24.8 и с учетом следующих испытаний

import { tick, fakeAsync } from '@angular/core/testing';

it('test 1000 milliseconds', fakeAsync(() => {
    const fn = jest.fn();
    setTimeout(() => {
        fn();
    }, 1000);

    tick(999);
    expect(fn).not.toHaveBeenCalled();
    tick(1);
    expect(fn).toHaveBeenCalled();
}));

Я хотел написать несколько похожих тестов, используя it.each

it.each([[1000], [2000], [3000]])(
    'test %d milliseconds',
    fakeAsync(milliseconds => {
        const fn = jest.fn();
        setTimeout(() => {
            fn();
        }, milliseconds);

        tick(milliseconds - 1);
        expect(fn).not.toHaveBeenCalled();
        tick(1);
        expect(fn).toHaveBeenCalled();
    }),
);

но я получаю эту ошибку при каждом тесте:

Expected to be running in 'ProxyZone', but it was not found.

    at Function.Object.<anonymous>.ProxyZoneSpec.assertPresent (node_modules/zone.js/dist/proxy.js:42:19)
    at node_modules/zone.js/dist/fake-async-test.js:588:47

Чего мне не хватает?

1 Ответ

1 голос
/ 29 июня 2019

До сих пор лучший обходной путь, о котором я думал, - это переместить деталь each в оболочку describe, чтобы fakeAsync использовался в "классическом" it.

describe.each([[1000], [2000], [3000]])(
    'test %d milliseconds',
    milliseconds => {
        it('', fakeAsync(() => {
            const fn = jest.fn();
            setTimeout(() => {
                fn();
            }, milliseconds);

            tick(milliseconds - 1);
            expect(fn).not.toHaveBeenCalled();
            tick(1);
            expect(fn).toHaveBeenCalled();
        }));
    },
);

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