this.context является нулевым в jest / Enzyme - PullRequest
2 голосов
/ 08 октября 2019

У меня есть класс реагирования без чего-либо для визуализации. Он имеет несколько функций, которые используют const name = { this.context } внутри функции. Однако name (в приведенном ниже примере) всегда не определено. Я не уверен, что я делаю неправильно.

Я попытался установить контекст wrap.setContenxt({name: true}), но все равно при вызове функции он показывает this.context как {}.

person.js

export class Person extends Component {
  constructor(props) {
    super(props);
  }

  someMethod() {
    const { name } = this.context;
    const { record } = this.props;

    if (record && name) {
      this.setState({
        awesome: true
      });
    }
  }

  componentDidMount() {}

  render() {
    return null
  }
}

test.js

describe("this.context test", () => {

  const props = { record: true }
  const context = { name: false }

  it('should test someMethod()', () => {
    const wrap = shallow( <Person {...props} />, {context})
    const instance = wrap.instance()

    instance.someMethod();
    expect(instance.state.awesome).toBe(true) // pass

  })   
});

Я ожидаю, что ему не следует устанавливать состояние, поскольку name равно false

Обновление:
Одна вещь, которую я пропустил в документации:

Корневой компонент, который вы рендерите, должен иметь contextTypes статическое свойство.

На основании этого, еслиЯ обновляю test.js следующим образом, он работает:

describe("this.context test", () => {
   // ***this was missing***
   Person.contextTypes = {
      name: PropTypes.boolean
   };

  const props = { record: true }
  const context = { name: false }

  it('should test someMethod()', () => {
    const wrap = shallow( <Person {...props} />, {context})
    const instance = wrap.instance()

    instance.someMethod();
    expect(instance.state.awesome).toBe(true) // fail

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