TypeError: Function.prototype.name фиктивный геттер вызывается НЕФУНКЦИОНАЛЬНО ТОЛЬКО когда я запускаю с `--coverage` - PullRequest
0 голосов
/ 01 октября 2018

Когда я запускаю свои тесты с --coverage

 yarn run test --coverage

Появляется следующая ошибка

component › should render with message if error occour

TypeError: Function.prototype.name sham getter called on non-function

  14 |              );
  15 |
> 16 |              expect(wrapper).toMatchSnapshot();
     |                              ^
  17 |      });
  18 |
  19 |      it("should render if error occour", function() {

  at Function.getName (../node_modules/function.prototype.name/implementation.js:31:9)
  at displayNameOfNode (../node_modules/enzyme-adapter-utils/build/Utils.js:156:95)
  at ReactSixteenAdapter.displayNameOfNode (../node_modules/enzyme-adapter-react-16/build/ReactSixteenAdapter.js:605:62)
  at typeName (../node_modules/enzyme/build/Debug.js:60:43)
  at internalNodeToJson (../node_modules/enzyme-to-json/mount.js:70:31)
  at mountToJson (../node_modules/enzyme-to-json/mount.js:93:12)
  at Object.<anonymous>.exports.default (../node_modules/enzyme-to-json/index.js:14:32)
  at Object.print (../node_modules/enzyme-to-json/createSerializer.js:22:40)
  at printPlugin (../node_modules/pretty-format/build/index.js:287:16)
  at prettyFormat (../node_modules/pretty-format/build/index.js:485:16)
  at Object.throwingMatcher (../node_modules/expect/build/index.js:320:33)
  at Object.toMatchSnapshot (src/components/molecules/ErrorBoundary/ErrorBoundary.test.jsx:16:19)

Это мой ErrorBoundary компонент

import React from "react";

export default class extends React.Component {
    constructor(props) {
        super(props);
        this.state = { hasError: false };
    }

    componentDidCatch(error, info) {
        this.setState(prevState => ({ ...prevState, hasError: true }));
    }

    render() {
        const { hasError } = this.state;
        const { children, message = "Ops, ocorreu um erro. Tente novamente" } = this.props;

        return hasError ? <h1>{message}</h1> : children;
    }
}

И мой тест ..

import React from "react";
import ErrorBoundary from "./ErrorBoundary";

describe("<ErrorBoundary> component", function() {
    it("should render with message if error occour", function() {
        function ProblemChild() {
            throw new Error("Error thrown from problem child");
        }

        const wrapper = mount(
            <ErrorBoundary message="Ops, algum erro ocorreu">
                <ProblemChild />
            </ErrorBoundary>
        );

        expect(wrapper).toMatchSnapshot();
    });
});

1 Ответ

0 голосов
/ 18 октября 2018

Я только что решил это в своей базе кода.Проблема была вызвана отсутствием имени класса в экспорте, поэтому ваше исправление, скорее всего, добавит имя класса в ваш компонент ErrorBoundary и везде, где оно отсутствует.т.е.

Изменение: export default class extends React.Component {

Кому: export default class ErrorBoundary extends React.Component {

Надеюсь, это поможет!

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