Невозможно шпионить за сторонней библиотечной функцией в тесте - PullRequest
1 голос
/ 11 октября 2019

У меня есть компонент, который использует стороннюю библиотеку. Когда кнопка нажата, она запускает API библиотеки .. получает данные из своего обратного вызова и вызывает this.props.SaveData с возвращенными данными.

const Comp = () => {
    let editorApi: any;

    const triggerSave = () => {
        // call to third party component api 
        editorApi.export((data) => {
            this.props.SaveData(data.values);
        })
    }

    return (
        <>
            <ThirdPartyEditor ref={(editor: any) => editorApi = editor} />
            <button onClick={triggerSave}>Save Data</button>
        </>
    )
}

Поскольку я тестирую компонент Comp,Я высмеял third-party-editor в моем тесте. Но теперь, когда я пытаюсь проверить, что this.props.SaveData был вызван, я получаю эту ошибку:

Cannot spy the export property because it is not a function; undefined given instead

Тест:

jest.mock("third-party-editor", () => ({
    default: () => "MyEditor"
}))

test("it calls SaveData when button is clicked", () => {
    const editor = jest.spyOn(ThirdPartyEditor, "export").mockImplementation((data) => );
    const { container, queryByText } = render(<Comp {...props} />);
    act(() => fireEvent.submit(queryByText("Save Data")));
    // fails to find export
})

РЕДАКТИРОВАТЬ: Различные насмешкиподход

jest.mock("third-party-editor", () => ({
    default: () => {
        return class Mocked {
            public editorApi = jest.fn();
            public export = jest.fn();
            public render() {
                return "Editor";
            }
        };
    },
}));

Возвращает ошибку TypeError: Cannot read property 'export' of undefined

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