как использовать погружение в функции оболочки для фермента - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу создать функцию-обертку, которая могла бы принимать компонент в качестве аргумента и возвращать его в отрисованном виде с помощью темы.Как внизуно он продолжал выдавать обертку с ошибкой:

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;     
    };

enter image description here

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

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);
      });
...