У меня есть класс реагирования без чего-либо для визуализации. Он имеет несколько функций, которые используют 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
})
});