Есть ли способ проверить частные методы? - PullRequest
0 голосов
/ 24 июня 2019

У меня есть компонент React 'A'.Один метод «foo» внутри него передается в качестве опоры компоненту «B».foo запускается при щелчке компонента B.

Вопрос - Как проверить этот метод foo?

Я могу обойти эту проблему, сделав метод foo общедоступным и протестировав его отдельно.Но я не хочу делать это публичным.Другой способ, который я попробовал и не сработал, - вызвать событие click в компоненте B, надеясь, что оно вызовет метод foo.Не уверен, если это возможно и, если возможно, как!

const A = () => {
    const foo = () => {console.log('Clicked!')}
    return (
      <B clickTrigger={foo} />
    )
}

Ответы [ 3 ]

1 голос
/ 25 июня 2019

Звучит так, будто вы хотите проверить, что щелчок вызывает некоторые изменения в компоненте, а не просто проверить, что метод вызван.

Вы можете визуализировать компонент A, вызвать событие щелчка,и сделать утверждения, основанные на том, как это вызывает изменения в выходных данных компонента.Вот как может выглядеть тест, используя react-testing-library:

test('does a thing when clicked', () => {
  const { getByText } = render(<A />);
  // This assumes you have a button inside component B
  // that has `foo` as the onClick:
  fireEvent.click(getByText('Click me'));
  // Make assertions here based on how the click handler
  // causes the component's output to change, generally based
  // on some text changing
  expect(getByText('You clicked the button')).toBeInTheDocument();
})
0 голосов
/ 25 июня 2019

Нет способа получить ссылку внутри замыкания, поэтому вам придется каким-то образом экспортировать ее в свою тестовую среду. Есть шаблон, который использует WeakMaps для хранения приватного состояния, и если тестовая среда имеет доступ к WeakMap, она может заглянуть внутрь, в то время как другие объекты без этой ссылки не могут.

let p = new WeakMap();
const A = () => {
    let foo = p.get(A);
    return (
        <B clickTrigger={foo} />
    );
};
p.set(A, () => {console.log('Clicked!')});

// Export A and p to testing framework but just A to clients
0 голосов
/ 24 июня 2019

Вы должны смоделировать код, выполняемый внутри функции foo.Благодаря этому макету вы сможете проверить, что ваша функция foo была успешно вызвана.

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