Simulate 'change' doesn't work for select
See original GitHub issueHi, i’m adding tests to my pagination component based on Select
PageSizeSelector.js
class PageSizeSelector extends PureComponent {
..
render() {
const {pageSize} = this.props;
return <Select
options={this.pageSizeOptions}
value={pageSize}
onChange={(option) => this.pageSizeChangeFunc(option.value)()}
clearable={false}
/>
}
}
PageSizeSelector.test.js
import {mount} from 'enzyme'
...
it('changing pageSize', () => {
let size = 0;
const onPageSizeChanged = (pageSize) => size = pageSize;
const wrapper = mount(
<PageSizeSelector
pageSize={10}
onPageSizeChanged={onPageSizeChanged}
/>
);
wrapper.find('Select').simulate('change', {target: {value: 50}});
expect(size).to.eql(50);
})
onPageSizeChanged isn’t called. If replace simulate line with
wrapper.find('Select').find('input').simulate('change', {target: {value: 50}});
get exception
- TypeError: str.replace is not a function
at stripDiacritics (node_modules/react-select/lib/utils/stripDiacritics.js:7:13)
at filterOptions (node_modules/react-select/lib/utils/defaultFilterOptions.js:13:50)
at filterOptions (node_modules/react-select/lib/Select.js:992:11)
at render (node_modules/react-select/lib/Select.js:1116:45)
at node_modules/react/lib/ReactCompositeComponent.js:793:21
at measureLifeCyclePerf (node_modules/react/lib/ReactCompositeComponent.js:74:12)
Using react-select@^1.0.0-rc.2 Looked at https://github.com/airbnb/enzyme/issues/400 as well Thanks
Issue Analytics
- State:
- Created 7 years ago
- Reactions:27
- Comments:17 (1 by maintainers)
Top Results From Across the Web
enzyme not simulating change event on React Material-UI v1
I cloned your branch and made the test works, but I figured out something intersting: the simulate method works different in a ...
Read more >Testing a Custom Select with React Testing Library
I've added a data-testid to make it easy to find the select and implemented a handleChange handler that simulates the one from react-select...
Read more >Simulating a select dropdown change in Jest
First off, select elements dispatch a change event. This means that simply clicking the select and then the option doesn't work. Now there...
Read more >Simulate React On-Change On Controlled Components
React will register both the set and the event, see it's value is still 'not working', consider it a duplicate event and swallow...
Read more >Building and Testing a Select Component - Debbie O'Brien
... the component render in isolation as well as Tests using React Testing Library to test the select works on change and shows...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
+10000000000000000 🎱
I answered the question using testing-library, easily adaptable to enzyme. For me, the Select is embedded in a component, but this still works, as long as you can pick the right input value.
https://stackoverflow.com/a/57699061/141552
Basically pretend to be a screen reader.
Using testing-library and v2.0
Trying to avoid using anything very specific like
classNamePrefix
or hacking into the way the component operates by looking for the onChange prop or whatever.Now we basically pretend to be a screen reader and focus, and press the down arrow.
And now click on the value you want
And assert.