Я вставил свой компонент ниже, который очень, очень простой. Когда компонент монтируется, он будет в основном вызывать действие fetchMessage
, которое возвращает сообщение от API. Это сообщение, в свою очередь, будет установлено как state.feature.message
в функции mapStateToProps
.Советы при тестировании подключенного компонента Redux
У меня полная потеря, где начать тестирование этого компонента. Я знаю, что я хочу, чтобы проверить, что:
1) Компонент Функции визуализируются
2) fetchMessage
функции props
называется
3) Он отображает или имеет правильную message
свойства при визуализации с помощью что
Я попытался установить свой тестовый файл, как вы можете видеть ниже, но я просто закончил с повторяющейся ошибкой после ошибки со всем, что я пытаюсь.
Может ли кто-нибудь указать мне в правильном направлении с тем, что я делаю неправильно?
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import * as actions from './actions';
class Feature extends Component {
static propTypes = {
fetchMessage: PropTypes.func.isRequired,
message: PropTypes.string
}
componentWillMount() {
this.props.fetchMessage();
}
render() {
return (
<div>{this.props.message}</div>
);
}
}
function mapStateToProps(state) {
return { message: state.feature.message };
}
export default connect(mapStateToProps, actions)(Feature);
Тестовый файл:
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import { Provider } from 'react-redux';
import expect from 'expect';
import { shallow, render, mount } from 'enzyme';
import React from 'react';
import sinon from 'sinon';
import Feature from '../index';
const mockStore = configureStore([thunk]);
describe('<Feature />',() => {
let store;
beforeEach(() => {
store = mockStore({
feature: {
message: 'This is the message'
}
});
});
it('renders a <Feature /> component and calls fetchMessage',() => {
const props = {
fetchMessage: sinon.spy()
};
const wrapper = mount(
<Provider store={store}>
<Feature {...props} />
</Provider>
);
expect(wrapper.find('Feature').length).toEqual(1);
expect(props.fetchMessage.calledOnce).toEqual(true);
});
});
Означает ли это, что вы явно не экспортировали 'UnconnectedFeature'? – JoeTidee
Спасибо, я обновил названный импорт – therewillbecode