Тестирование с использованием контекста в реагировать на использование useRouteMatch - PullRequest
0 голосов
/ 23 января 2020

У меня есть некоторый код, который перемещает параметр маршрута в провайдер контекста , который будет использоваться глубже (внутри <Spamalot />), используя useReactRouter .

const App = () => {
  const match = useRouteMatch('/spam/:spamId?');
  const { spamId } = get(match, 'parans', {});
  return (
    <div className={styles.sketchContainer}>
      <SpamContext.Provider value={spamId}>
          <Spamalot />
      </SpamContext>
    </div>
  )
}

Я тестирую взаимодействие между useRouteMatch и Context, используя этот тестовый код:

let wrapper;
beforeEach( () => {
    wrapper = mount(<MemoryRouter initialEntries={['/spam/1942']}></MemoryRouter>);
});
it('passes spam around', () => {
    expect(wrapper.exists(SpamContext.Provider)).to.equal(true)
    expect(wrapper.find(SpamContext.Provider).prop('value')).to.equal('1942')
});

Но я получаю AssertionError: expected false to equal true ... что похоже на первое ожидание в моем тесте, что означает что код не находит поставщика контекста.

Если я добавлю в тест старый добрый console.log(wrapper.debug());, я получу общую схему:

<MemoryRouter initialEntries={[...]}>
    <Router history={{...}}>
        <App>
            <Spamalot />
        </App>
    </Router>
</MemoryRouter>

Ранее этот тест делал shallow рендер вместо mount, поэтому я не уверен, почему тест больше не проходит. Как монтаж делает контекст исчезает? Или это было обертывание компонента в </MemoryRouter> сделать это?

...