Значение jest.fn () должно быть фиктивной или полученной шпионской функцией: [Функция getTemplates] - PullRequest
0 голосов
/ 29 мая 2018

У меня есть функция в модуле handlelistOfTemplates, которая вызывает действия, определенные в другом файле.Я хочу проверить, когда handlelistOfTemplates вызывается, функция в файле действий вызывается с правильными параметрами.

Мой компонент контейнера:

import React from 'react';
import { connect } from 'react-redux';
import {bindActionCreators} from 'redux';

import * as getData from '../../services/DataService';

class Container extends React.Component {

    constructor(props){
        super(props) 
        this.props.actions.getTemplates(1);
        this.state = {
            value: 1
        }

    }

    handlelistOfTemplates = (template, index, value) => {
        this.props.selectedTemplate(template);
        this.setState({ value });
        this.props.actions.getTemplates(template);
    };

    componentDidMount() {
    }

    render() {
        return(

                <ListOfTemplates listOfTemplates={this.props.listOfTemplates} value={this.state.value} onChange={this.handlelistOfTemplates}/>
            );
    }
}
function mapStateToProps({state}) {
    return {
        listOfTemplates: state.listOfTemplates
    }
}
function mapDispatchToProps(dispatch) {
    return {
    actions: bindActionCreators(getData, dispatch)
    };
   }
module.exports = connect(mapStateToProps, mapDispatchToProps)(Container);

И мой тест:

import React from 'react';
import sinon from 'sinon';
import expect from 'expect';
import { shallow } from 'enzyme';
import PropTypes from 'prop-types';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import { createMockStore, createMockDispatch } from 'redux-test-utils';

import Container from './Container';
const shallowWithStore = (component, store) => {
    const context = {
        store,
        muiTheme: getMuiTheme(),
    };

    const childContextTypes = {
        muiTheme: React.PropTypes.object.isRequired,
        store: PropTypes.object.isRequired
    }
    return shallow(component, { context, childContextTypes });
};
let store;
const loadComponent = (testState) => {

    const props = {
        actions: {
            getTemplates: () => {return Promise.resolve()}
        }
    }
    store = createMockStore(testState)
    return shallowWithStore(<Container {...props}/>, store);
}

const getFakeState = () => {
    return {
        listOfTemplates: [],

    };
}

describe('Container', () => {
    let testState, component;


    describe("when Appeal template is selected from select template dropdown", () => {
        beforeAll(() => {
            testState = getFakeState();
            component = loadComponent(testState);

        });

        fit('should update the content in editor', (done) => {
            component.dive().find('ListOfTemplates').props().onChange('Appeal', 1, 2);
            component.update();
            done();
            expect(component.dive().state().value).toEqual(2) // error value still is at 1
expect(component.instance().props.actions.getTemplates).toHaveBeenCalled();

        });
    });
});

Когда я запускаю вышеупомянутый тест, я получаю следующую ошибку:

expect(jest.fn())[.not].toHaveBeenCalled()

    jest.fn() value must be a mock function or spy.
    Received:
      function: [Function getTemplates]

Есть ли что-то еще, что я должен запустить, чтобы заставить это работать? Может быть, мой издевательство не правильно.

даже я пытался сделать это: jest.spyon (component.instance (). Props.actions, 'getTemplates');перед ожиданием ошибка остается той же.

Кроме того, когда я проверяю, было ли изменено локальное состояние компонента или нет.Я не получаю обновленное состояние.когда я звоню component.dive().find('ListOfTemplates').props().onChange('Appeal', 1, 2);

, component.dive().state().value должен стать 2, но вместо этого он равен 1.

Не могли бы вы помочь мне, где я делаю неправильно?

1 Ответ

0 голосов
/ 29 мая 2018

Вы должны передать функцию Mock getTemplate вашему компоненту, иначе jest не сможет проверить, был ли он вызван или нет.

Вы можете сделать это следующим образом: (обратите внимание jest.fn())

 const props = {
        actions: {
            getTemplates: jest.fn(() => Promise.resolve())
        }
    }
...