gpt4 book ai didi

reactjs - 使用 Jest 时是否有另一种方法来模拟组件的 mapDispatchToProps

转载 作者:行者123 更新时间:2023-12-03 13:50:57 27 4
gpt4 key购买 nike

我目前有一个像这样的组件:

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { getDataAction } from ' './my-component';

export class MyComponent extends { Component } {
componentWillMount() {
this.props.getData();
}
render(){

<div>
this.props.title
</div>

}
}

const mapStateToProps = (state) => ({
title: state.title
});

const mapDispatchToProps = (dispatch) ({
getData() {
dispatch(getDataAction());
}
});

export default connect(mapStateToProps, mapDispatchToProps)(MyComponent)

我正在尝试使用 Jest 和 enzyme 对其进行浅层渲染测试。

测试:

import React from 'react';
import { shallow } from 'enzyme';
import { MyComponent } from './index';

it('renders without crashing', () => {
shallow(<MyComponent getData={jest.fn()} />);
});

我的问题是,这是传统的模拟方式吗? Jest 官方文档没有具体提及模拟 Prop 和这篇文章 Using Jest to mock a React component with props是关于完全安装的测试。还有另一种方法来模拟dispatchToProps吗?在这个例子中只有一个,但是如果我在dispatchToProps中有很多函数怎么办?

附带问题:在我的真实文件中,我引用了一个像 this.props.information.value 这样的值,我希望它会抛出一个错误,例如 cannot get value of undefined 因为信息没有被模拟/定义,但事实并非如此。仅当函数不存在时才会引发错误。

最佳答案

您可以导出 mapDispatchToProps 并通过在测试中导入它来为其编写测试。

MyComponent.js 末尾添加 export { mapDispatchToProps };

MyComponent.js 旁边创建 MyComponent.tests.js 文件

import configureMockStore from 'redux-mock-store';
import thunkMiddleware from 'redux-thunk';
import { mapDispatchToProps } from './MyComponent';

const configMockStore = configureMockStore([thunkMiddleware]);
const storeMockData = {};
const mockStore = configMockStore(storeMockData);

describe('mapDispatchToProps', () => {
it('should map getDataAction action to getData prop', () => {
// arrange
const expectedActions = [getDataAction.type];
const dispatchMappedProps = mapDispatchToProps(mockStore.dispatch);
// act
dispatchMappedProps.getData();
// assert
expect(mockStore.getActions().map(action => action.type)).toEqual(expectedActions);
}
});

这里我使用了 thunk,只是为了让您知道如果您的商店设置中配置了中间件,该怎么做。

如果您使用像 thunk 这样的中间件,这里 getDataAction 也可以是一个函数,而不是像 { type: 'FETCH_DATA' } 这样的简单操作。

但是,测试方法是相同的,只是您将使用显式操作类型创建 expectedActions,例如 const ExpectedActions = ['FETCH_CONTACTS'] < br/>
这里 FETCH_CONTACT 是您的 thunk 中调度的另一个操作,即 getDataAction

关于reactjs - 使用 Jest 时是否有另一种方法来模拟组件的 mapDispatchToProps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45597834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com