Джест / Фермент |Невозможно уничтожить свойство по пустому или неопределенному - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь проверить свою функцию на ComponentDidMount.Но я получаю эту ошибку: Cannot destructure property params on null or undefined.

Функция, которую я хочу проверить, такова:

  componentDidMount() {
    this.fetchUser();
  }

И она зависит от этой:

  fetchUser = () => {
    getUser(this.getUserUsername()).then(username => {
      this.setState({
        user: username.data
      });
    });
  };

который в свою очередь зависит от этого:

  getUserUsername = () => {
    const { match } = this.props;
    const { params } = match;
    console.log(params, 'params'); // return an object { username: "john" }
    console.log(match, 'match');
    **// return an object
    // { isExact: true
    //  params:
    // username: "john" .
    // __proto__: Object
    // path: "/management/users/:username"
    // url: "/management/users/john" }**
    return params.username;
  };

И вот мой тест:

  describe('componentDidMount', () => {
    it('should call fetchUsers function', () => {
      const match = { params: 'testName' };
      const params = match;
      const fetchUserFn = jest.fn(params);
      const wrapper = shallow(<UserDetailsScreen fetchUsers={fetchUserFn} />, {
        disableLifecycleMethods: true
      });
      wrapper.instance().componentDidMount();
      expect(fetchUserFn).toHaveBeenCalledTimes(1);
    });
  });

Но я получаю вышеуказанную ошибку.Не уверен, что мне нужно сделать, и хотя я нашел ответы, похожие на эту проблему, ответы не решают мою проблему.

КОД для getUser:


export const getUser = username => {
  const options = {
    method: httpMethod.GET,
    url: endpoint.GET_USER(username)
    // The GET_USER is an endpoint for 
    // that specific username
  };
  return instance(options);
};

Вышеприведенное возвращает aобещаю.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Попробуйте использовать синтаксис ниже

describe('componentDidMount', () => {
  it('should call fetchUsers function', () => {
    const match={params: {username: 'akshay'}, isExact: true, path: "", url: ""}
    const fetchUserFn = jest.fn(match);
    const wrapper = shallow(<UserDetailsScreen match={match} fetchUsers={fetchUserFn} />, {
      disableLifecycleMethods: true
    });
    expect(wrapper.containsMatchingElement(<h2>Details for 1</h2>)).toBeTruthy();
  });
});

, также вы можете использовать containsMatchingElement

0 голосов
/ 12 марта 2019

Вы по какой-то причине деструктурируете parmas, вы имели в виду params?

Попробуйте поискать по всему приложению parmas и проверьте, если у вас есть орфографическая ошибка.

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