props.params в ферментном тесте

Я пытаюсь протестировать свой компонент, который делает запрос getJSON в методе жизненного цикла componentWillMount. Он имеет следующий код:

api.getJSON(`users/${this.props.params.id}`)
            .done((result) => {
                this.setState({user: result});
            });

Как видите, он использует props.params.id для выполнения запроса. Проблема, с которой я столкнулся, находится в моем тесте. Когда я запускаю npm test, он возвращает невозможное чтение свойства undefined, undefined — это props.params. Как я могу получить этот объект в ферменте?


person Munsterberg    schedule 05.11.2016    source источник


Ответы (1)


Это один из способов использования фермента с мокко:
- Установите jsdom npm install --save-dev --save-exact jsdom jsdom-global
- Загрузите jsdom в оператор before (внутри описания)

    before(function () {
      this.jsdom = require('jsdom-global')()
    })

    after(function () {
      this.jsdom()
    })


- Теперь в своем тесте используйте mount следующим образом:

const someData = {data1:'yyyyyy'};
const wrapper = mount(<YourComponent yourProp={someData} />);


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

person Hosar    schedule 05.11.2016
comment
Также вам нужно иметь mocha.opts внутри тестовой папки (test\mocha.ops) с этим: -r jsdom-global/register. И вызовите mocha с опцией --require (mocha --require). - person Hosar; 05.11.2016