I have a problem when I'm testing redux using enzymes mount function.
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
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:
"moduleNameMapper": {
"^commons(.*)$": "<rootDir>/main/app/src/common/$1",
"^component(.*)$": "<rootDir>/main/component/$1"
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With