У меня есть некоторый код, который перемещает параметр маршрута в провайдер контекста , который будет использоваться глубже (внутри <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>
сделать это?