Я хочу создать функцию-обертку, которая могла бы принимать компонент в качестве аргумента и возвращать его в отрисованном виде с помощью темы.Как внизуно он продолжал выдавать обертку с ошибкой:
error: ShallowWrapper :: dive () можно вызывать только для компонентов
beforeEach(() => {
component = shallowWithTheme(<SomeComponent value />);
});
test('The text should be something text', () => {
expect(component.text()).toBe('Something text');
});
Функция обертки shallowWithTheme
export const shallowWithTheme = (children, options) => {
const wrapper = shallow(<ThemeProvider theme={theme}>{children}</ThemeProvider>, options).dive();
return wrapper;
};
Отредактировано
export const shallowWithTheme = (children, options) => {
const wrapper = shallow(<ThemeProvider theme={theme}>{children}</ThemeProvider>, options);
const instance = wrapper.root().instance();
return wrapper.shallow({ context: instance.getChildContext() }).dive();
};
Ошибка:
instance.getChildContext is not a function
Обновление:
После долгих часов поиска и проб и испытаний я в итоге использовал следующее решение, которое, я не думаю, является правильным способом сделать это, потому что вам нужно импортироватьваш дочерний компонент, чтобы найти их и получить доступ к их свойству.В предыдущем методе, который не работает с текущей версией.Я смог нырнуть один раз с корневого уровня.Поэтому, если мне нужно выполнить тест на двух дочерних компонентах, я должен использовать, например,
expect(wrapper.find(SearchButton).dive().props().isDisabled).toBe(false);
});
expect(wrapper.find(SearchInput).dive().props().isDisabled).toBe(false);
});
util.js
export const shallowWithTheme = children => (
shallow(children, { theme })
);
test.js
it('should enable the search button while the input is not empty', () => {
const wrapper = shallowWithTheme(<HomepageSearch />);
wrapper.setState({ orderSearch: '111' });
expect(wrapper.find(SearchButton).dive().props().isDisabled).toBe(false);
});