Есть ли причина, по которой функция насмешки для хуков не работает? - PullRequest
0 голосов
/ 22 января 2020
  it("test", () => {
    let setupComponent;
    let hook;

    setupComponent = mountReactHook(useInputState); // Mount a Component with our hook
    hook = setupComponent.componentHook;
    expect(hook.value).toEqual('');

    act(() => { 
      hook.onChange({target:{value: 1}});
    });

    expect(hook.value).toEqual(1);
  });

У меня есть этот модульный тест, но я получаю ошибку: TypeError: (0, _Wrapper.default) не является функцией. Я понимаю, что ошибка связана с функцией mountReactHook, поскольку именно там, где я ее вызываю, я получаю сообщение об ошибке, но на самом деле я не вижу в этом ничего плохого.

import { useState } from 'react';

export default () => {
  const [value, setValue] = useState('');

  return {
    value,
    onChange: (event) => {
      setValue(event.target.value);
    },
    reset: () => setValue('')
  };
};

Это крючок.

import React from 'react';
import { shallow } from 'enzyme';
import { act } from 'react-dom/test-utils';

export const mountReactHook = hook => {
  const Component = ({ children }) => children(hook());
  const componentHook = {};
  let componentMount;

  act(() => {
    componentMount = shallow(
      <Component>
        {hookValues => {
          Object.assign(componentHook, hookValues);
          return null;
        }}
      </Component>
    );
  });
  return { componentMount, componentHook };
};

Это функция издевательства. Что мне нужно исправить?

...