Озвучивание действия, переданного в качестве опоры для юнит-теста с использованием jest в ReactJS - PullRequest
0 голосов
/ 28 сентября 2018

Я пишу тест для одного из частных методов 'prepareUserCriteria' в моем компоненте 'UserDataView'.

Это, в свою очередь, передает данные в метод requestProfile, который на самом деле является действием.

Чтобы проверить 'prepareUserCriteria', мне нужно проверить, вызывается ли мой 'requestProfile' с правильными данными.

Однако я получаю сообщение об ошибке: «TypeError: Попытка обернуть неопределенное свойство undefined как функцию»

Как это исправить?

Вот код:

Компонент: UserDataView

prepareUserCriteria() {
 const criteria = this.state.searchCriteria;
 //Do some checks..
 if(...) {
    criteria = ......
 } else if(){
  criteria = .......
 } 

 return criteria;
} 

request(){
    //Do some checks...
    .............
    return this.props.dispatch.requestProfile({
        searchCriteria: this.prepareUserCriteria(),
        filters,
        ....
        //other arugments
        ....
        ....
    });
}

Тест:

import React from 'react';
import { shallow } from 'enzyme';
import { requestProfile } from '../profile-actions';
import { spy, stub, assert as sinnonAssert } from 'sinon';
import { UserDataView } from '../user-data-view';
import moment from 'moment';

test('should test prepareUserCriteria logic', () => {
    const userSearchProps = {
        dispatch: spy(),
        joiningDate: moment('2018-12-12T00:00:00.000Z'),
        background: {},
        error: false,
        isCalendarLoading: false,
        clearFlightSelectionState: () => {
        },
        metadata: fromJS({
            userProfileType: 'EMP'
        }),
        searchCriteria: {
            address: [{ currentCity: 'FCO' }, { permanentCity: 'LIN' }],
            user: {
                firstName: 'John',
                lastName: 'Smith'
            },
            isValidUser: true
        }
    };
    userSearchProps.requestProfile = stub(requestProfile).callsFake(() => {});
    const userDataView = shallow(<UserDataView {...userSearchProps} />, context);
    sinonAssert.calledWith(userDataView.instance().props.dispatch.requestProfile, { 
        searchCriteria: {
            address: [{ currentCity: 'FCO' }, { permanentCity: 'LIN' }],
            user: {
             firstName: 'John',
                lastName: 'Smith'
            },
            isValidUser: true
        }
  });
});

1 Ответ

0 голосов
/ 29 сентября 2018
TypeError: Attempted to wrap undefined property undefined as function

Вероятно означает, что requestProfile не определено.

userSearchProps.requestProfile = stub(requestProfile).callsFake(() => {});

Проверьте импорт.

...