Фермент не может прочитать this.props.match.params из ComponentDidMount - PullRequest
0 голосов
/ 07 сентября 2018

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

export class BasePage extends React.Component {
  componentDidMount() {
    const baseId = this.props.match.params.baseId;
    const access_token = this.props.auth;
    if (this.props.match.params.baseId) {
        this.props.dispatch(fetchSingleBase(baseId, access_token));
    }
  }
}

Указанная ниже ошибка также произошла в приведенном выше componentDidMount, но мне удалось исправить это с помощью оператора if.

BasePage отображается через Router в app.js:

    return (
      <div>
        <Navbar />
        <main>
          ...
          <Route exact path="/single-base/:baseId" component={BasePage} />
        </main>
      </div>
    );

На базовую страницу я возвращаю:

return (
    <div className="basepage">
        {title}
        <UserList baseId={this.props.match.params.baseId} />
        <MessageList baseId={this.props.match.params.baseId} />
    </div>
);

Если утверждение здесь не работает. При запуске теста npm я получаю следующее сообщение об ошибке:

TypeError: Cannot read property 'params' of undefined

И, наконец, самые основы теста:

import React from "react";
import ConnectedBasePage, { BasePage } from "./basepage";
import { shallow, mount, render } from "enzyme";

describe("<BasePage/>", () => {
    it("Renders without crashing", () => {
        shallow(<BasePage/>);
    });
});

Как решить эту ошибку?

1 Ответ

0 голосов
/ 07 сентября 2018

Вам необходимо передать объект фиктивного соответствия:

const match = {
                params : { 
                            baseId : 1 //any id you want to set
                         }
               }

describe("<BasePage/>", () => {
it("Renders without crashing", () => {
    shallow(<BasePage match={match}/>);
 });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...