简体   繁体   English

mapStateToProps()中的Jest + Enzyme测试错误

[英]Jest + Enzyme testing error in mapStateToProps()

I have a problem when I'm testing redux using enzymes mount function. 当我使用酶mount功能测试redux时,我遇到了问题。

Error: Uncaught [TypeError: selectors.selectMessages is not a function]

Why do I get this error ? 为什么我会收到此错误?

 //badgeSelector.js. R - is Ramda. import { createSelector } from 'reselect' export const selectMessages = createSelector(R.path(['badgeReducer', 'unreadMessages']), (messages) => messages) //App.js import * as selectors from 'commons/selectors/badgeSelector' export class App extends PureComponent { render() { return ( ... ) } } export default connect( (state) => ({ messages: selectors.selectMessages(state) }), (dispatch) => ({ updateBadge: () => { dispatch(updateBadge()) } }) )(App) //App.test.js import ConnectedApp, {App} from './App' describe('Badge react-redux test mount: ', () => { const mockStore = configureStore() let store, wrapper beforeEach(() => { store = mockStore(state) wrapper = mount(<Provider store={store}><ConnectedApp /></Provider>) //Error when mount }) it('render mount component', () => { expect(wrapper.find(ConnectedApp).length).toEqual(1) }) }) 

Solved: jest not accept alias paths from webpack 解决:jest不接受来自webpack的别名路径

To fix above bug you need to setup alias if needed: 要修复上述错误,您需要在需要时设置别名:

 alias: { component: path.resolve(__dirname, './main/component'), commons: path.resolve(__dirname, './main/app/src/common') } 

And correctly setup jest moduleNameMapper: 并正确设置jest moduleNameMapper:

 "moduleNameMapper": { "^commons(.*)$": "<rootDir>/main/app/src/common/$1", "^component(.*)$": "<rootDir>/main/component/$1" } 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM