Тестирование модуля API контекста не удалось с TypeError - PullRequest
0 голосов
/ 26 января 2019

У меня есть компонент HOC WithContext (в файле с удобным названием withContext.js), как показано ниже

import React from 'react';
import { DEFAULT_STATE } from './store';
const MyContext = React.createContext(DEFAULT_STATE);


export function WithContext(Component) {
    return function WrapperComponent(props) {
        return (
            <MyContext.Consumer>
                {state => <Component {...props} context={state} />}
            </MyContext.Consumer>
        );
    };
};

и компонент, который использует его следующим образом

import React from "react";
import { WithContext } from './withContext';

const MyComp = (context) => { 
    return (
        <div className="flex dir-col" id="MyComp">
            <p>This is a test</p>
        </div>
    )
};

export default WithContext(MyComp);

У меня также есть модульное тестирование, целью которого является проверка этого MyComp компонента. Модульный тест следует

import React from "react";
import {shallow} from "enzyme";
import Enzyme from "enzyme";
import Adapter from "enzyme-adapter-react-16";
import { WithContext } from './withContext';

// We need to configure our DOM 
import jsdom from 'jsdom'
const {JSDOM} = jsdom;
const {document} = (new JSDOM('<!doctype html><html><body></body></html>')).window;
global.document = document;
global.window = document.defaultView

Enzyme.configure({
    adapter : new Adapter()
})

beforeEach(() => {
    jest.resetModules()
})

//Takes the context data we want to test, or uses defaults
const getMyContext = (context = {
        state : {}
    }) => {

  // Will then mock the MyContext module being used in our MyComp component
  jest.doMock('withContext', () => {
    return {
      MyContext: {
        Consumer: (props) => props.children(context)
      }
    }
  });

  // We will need to re-require after calling jest.doMock.
  // return the updated MyComp module that now includes the mocked context
  return require('./MyComp').default;

};

describe("MyComp component loading check", () => {
    test("Renders the MyComp component correctly", () => {
        const MyCompContext = getMyContext();
        const wrapper = shallow(<MyComp/>);
        // make sure that we are able to find the header component
        expect(wrapper.find(".flex").hostNodes().length).toBe(1);
    });
});

Однако этот тест продолжает проваливаться с сообщением

 TypeError: (0 , _withContext.WithContext) is not a function

      };
export default WithContext(MyComp);

Не могли бы вы дать мне знать, что здесь не так?

Спасибо

1 Ответ

0 голосов
/ 27 января 2019

Похоже, что вы издеваетесь withContext с помощью jest.doMock, но смоделирование, которое вы возвращаете из заводской функции, не содержит функцию WithContext.

Затем, когда вы require('./MyComp').default, она используетwithContext макет в вашем модуле MyComp и сбой при попытке export default WithContext(MyComp);, поскольку макет withContext не определяет функцию WithContext.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...