Как шпионить по умолчанию функцию поддержки в Jest - PullRequest
2 голосов
/ 04 октября 2019

Я пытаюсь протестировать реквизит по умолчанию, который является типом функции, но не уверен, как это сделать с помощью шутки или шпионажа Jest:

Попытка следующего теста:

it("should call default toggle function prop on click of footer button", () => {
            const wrapper = shallow(
                <InfoModal
                    isOpen={true}
                    message="Primary message"
                    secondaryMessage="Secondary message"
                />
            );
            const footerButton = wrapper.find("ModalFooter Button");
            const fn = jest.spyOn(wrapper.props(), "toggle");
            footerButton.simulate("click");
            wrapper.update();
            expect(fn).toHaveBeenCalled();
        });

Этоговорит TypeError: Невозможно назначить только для чтения свойство 'toggle' объекта '[object Object]' , где toggle является функцией в качестве значения по умолчанию для InfoModal.

Как мы можем проверитьФункция prop, которая была установлена ​​по умолчанию, не определена пользователем.

1 Ответ

2 голосов
/ 04 октября 2019

Вы можете получить доступ к DefaultProps, как статические реквизиты;

function App() {
  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

App.defaultProps = {
  check: () => console.log('i am working')
}

App.defaultProps.check()

Отредактировано:

Вы можете следить за этим вот так;

const spy = jest.spyOn(App.defaultProps, 'check');
const RenderedApp = shallow(<App />);
RenderedApp.simulate('click');
expect(spy).toHaveBeenCalled();

Так что измените эту строку

const fn = jest.spyOn(wrapper.props(), "toggle");

К

const fn = jest.spyOn(wrapper.defaultProps, "toggle");

Подойдет вам.

https://codesandbox.io/s/zen-morning-881ny

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