Как протестировать функции, отличные от рендеринга, в классе React с помощью jest?

Я пытаюсь сделать некоторые TDD на React приложение, которое я строю. Используя jest Я могу проверить свою функцию рендеринга, чтобы увидеть, получаю ли я то, что ожидаю получить. Что, если я хочу протестировать какую-то другую функцию в классе? Как мне его достать? Например, вот React класс:

var moment = require('moment');
var React = require('react');
var utils = require('./utils');

module.exports = React.createClass({
    days: function() {
        var days = [];
        var nextMonth = this.daysFromNextMonth(days, numberOfDays);
        return days;
    },
    daysFromNextMonth: function(days, numberOfDays) {
        ...
    },
    render: function() {
        var that = this;
        var days = this.days().map(function(day, i) {
            return <li key={day}>{day}</li>
        return (
            <ul className='monthly-view'>
                {days}
            </ul>
        );
    }
});

Я хочу схватиться за мой days или daysFromNextMonth функции и посмотреть, возвращают ли они то, что я ожидал бы. Я пробовал в jest чтобы получить функция такова:

it('should show an render', function() {
    var result = DailyView.daysFromNextMonth(day, 10)
    ....
});

мой error говорит, что у меня нет метод daysFromNextMonth. Как это исправить?

3 ответов


вам нужно отобразить компонент для ссылки на методы на нем (сродни созданию экземпляра класса перед использованием методов экземпляра):

var view = TestUtils.renderIntoDocument(<DailyView />)
var result = view.daysFromNextMonth(day, 10)

затем вы можете вызвать любой из методов экземпляра.


используя энзим я нашел эту ссылку на тестирование функций компонента, https://github.com/airbnb/enzyme/issues/208.

const component = shallow(<MyComponent />);
component.instance().foo();

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


сочетание jest и enzyme следует сделать трюк. Проверьте jest DOM тестирование документация и фермент.

основная идея, которую вы можете использовать enzyme для мелкого рендеринга компонентов и манипулирования ими.