Как проверить реквизит после назначения новой переменной - PullRequest
1 голос
/ 20 апреля 2019

Я пытаюсь проверить состояние if с помощью реквизита. Это работает нормально, если я передам this.props.thingToTest, но если я назначу что-то вроде const propsVariable = this.props.thingToTest и протестирую условие if, я не получу покрытие кода.

Я пытался передать const в качестве реквизита в моей мелкой обертке или объявить const в тесте, но он все равно его не видит.

Код компонента:

render() {
    const propsVariable = this.props.thingToTest;

    if (this.props.otherThingToTest === 'test') {
      return <Component />;
    } else {
      if (propsVariable) {
        return <OtherComponent />;
      }
    }
  }

Тестовый код:

const props = {
  propsVariable: {}
}

it('tests else condition in render method', () => {
    const wrapper = shallow(<OriginalComponent {...props} />);
    const instance = wrapper.instance();
    jest.spyOn(instance, 'render');
    instance.render();
    expect(instance.render).toHaveBeenCalled();
  });

Я ожидаю, что другой случай получит удар и вернет <OtherComponent />, но это совсем не затронет другой случай.

Если я положу otherThingToTest в объекте props в моем тесте, он попадет в первый if вариант отлично, но, поскольку моя другая пропа thingToTest назначена переменной, он не попадет в случай else и я не уверен, как это проверить.

1 Ответ

1 голос
/ 20 апреля 2019

Поскольку вы не передали thingToTest реквизиты компоненту в тестовом коде, propsVariable будет присвоен неопределенный.

const propsVariable = this.props.thingToTest; // propsVariable = undefined

Поэтому код не будет проходить путь if внутри *Блок 1007 * и, следовательно, оператор return <OtherComponent />; не будут охвачены.

Таким образом, вам просто нужно передать thingToTest реквизит компоненту в тестовом коде, и он будет работать нормально.

const props = {
  thingToTest: 'someValue'
  // passing propsVariable: {} won't work
  // since it will be available as 
  // "this.props.propsVariable" inside the 
  // component 
}

Примечание: else дело сработает, если вы не передадите otherThingToTest реквизит.

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