У меня есть компонент, который использует стороннюю библиотеку. Когда кнопка нажата, она запускает 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