Функциональный тест отладки - PullRequest
0 голосов
/ 08 мая 2019

Я использую функцию debounce внутри componentDidMount примерно так:

    ...
    if (setNavigationSections) {
        setNavigationSections(filteredFieldGroups);
        window.addEventListener('scroll', debounce(50, this.getNavigationActive));
    }  
    ...

и у меня есть для него юнит-тест:

    it('should add a scroll handler on mount', () => {
        // const d = instance.getNavigationActive;
        // const deb = debounce(50, d);
        // expect(window.addEventListener).toHaveBeenCalledWith('scroll', deb); 
        expect(window.addEventListener).toHaveBeenCalledWith('scroll', instance.getNavigationActive);
    });

модульный тест не пройден, и сообщение: enter image description here

Я пробовал возможное решение, подобное приведенному в закомментированном коде, но оно все равно не работает.

Нужно ли, может быть, издеваться над функцией debounce по-другому?

1 Ответ

1 голос
/ 08 мая 2019

В реальном коде метод addEventListener вызывается с scroll и debounce, но во время тестирования мы пытаемся проверить с неверным вторым параметром.Вы можете смоделировать метод debounce, используя jest.mock, как показано ниже:

import { debounce } from 'throttle-debounce';
jest.mock('throttle-debounce', () => {
    return {
        debounce: jest.fn().mockReturnValue('mockDebouncedValue')
    }
})
describe('your test description', () => {
    it('should add a scroll handler on mount', () => {
        // here debounce points to the mocked function
        // since addEventListener is called with the value which is returned after calling debounce, so we check here.
        expect(window.addEventListener).toHaveBeenCalledWith('scroll','mockDebouncedValue');
        expect(debounce).toBeCalled();
    });
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...