JEST ожидаемая функция toBeCalled внутри setTimeout - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть простая функция, которая открывает новое окно внутри setTimeout и хочу проверить, что это открытое окно было вызвано.

export function foo() {
     setTimeout(() => {
        window.open('http://google.com');
    }, 0);
 }

describe('foo', () => {
    beforeEach(() => {
        jest.useFakeTimers();
        global.open = jest.fn();
    });

    it('calls open', () => {
        foo();

        expect(setTimeout).toHaveBeenCalledTimes(1);
        expect(global.open).toBeCalled(); //FAILING
    });
});

В настоящее время мои ожидания не оправдываются: «Ожидается, что была вызвана фиктивная функция». Мокание window.open выглядит нормально, когда тест проходит, когда я удаляю setTimeout из своей функции.

Просто интересно, сможет ли кто-нибудь направить меня в правильном направлении. Заранее спасибо.

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете смоделировать ваш global.open и проверить, был ли он вызван при выполнении foo():

it('calls open', (done) => {
        global.open = jest.fn(); // mocking global.open
        foo();  // calling foo()

        setTimeout(()=> {
          expect(global.open).toBeCalled()
          done()
        })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...