-
-
Notifications
You must be signed in to change notification settings - Fork 2k
Description
Describe the bug
This is a dedicated issue corresponding to a comment I initially left at #1213 (comment).
When using React Fragments, it looks like only the first child is being picked up by the matchers.
To Reproduce
Assuming the following code:
const Foobar = () => (
<>
<div>Foo</div>
<div>Bar</div>
</>
);And the following test:
describe('<Foobar />', () => {
test('should include Foo and Bar', () => {
const wrapper = mountWithIntl(<Foobar />);
expect(wrapper).toIncludeText('Foo');
expect(wrapper).toIncludeText('Bar');
});
});Bar simply does not get rendered:
FAIL test/src/Foobar.test.jsx
● <Foobar /> › should include Foo and Bar
Expected <IntlProvider> to contain "Bar" but it did not.
Expected HTML: "Bar"
Actual HTML: "Foo"
8 |
9 | expect(wrapper).toIncludeText('Foo');
> 10 | expect(wrapper).toIncludeText('Bar');
| ^
11 | });
12 | });
13 |
at Object.test (test/src/Foobar.test.tsx:10:21)
mountWithIntl is a simple wrapper that adds an IntlProvider (from react-intl) to help us deal with i18n in our tests. If I remove it and replace with bare mount, I get:
● <Foobar /> › should include Foo and Bar
Trying to get host node of an array
7 | const wrapper = mount(<Foobar />);
8 |
> 9 | expect(wrapper).toIncludeText('Foo');
| ^
10 | expect(wrapper).toIncludeText('Bar');
11 | });
12 | });
I get the same results if I swap the <>...</> shorthand with <React.Fragment>...</React.Fragment>.
However, if the code is:
const Foobar = () => (
<div>
<div>Foo</div>
<div>Bar</div>
</div>
);then now the tests pass fine.
For what it's worth, the built code for Foobar (built with tsc) looks like:
const Foobar = () => (React__default.createElement("div", null,
React__default.createElement("div", null, "Foo"),
React__default.createElement("div", null, "Bar")));Expected behavior
I'm very confused as Enzyme 3.5 has Fragment support. Do you see something just obviously wrong above?
I'm wondering if the TypeScript compilation doesn't compile into something that's causing #1178. Or I'm just doing something wrong...
Additional context
[email protected][email protected][email protected]and[email protected](outside of this project I know)- TypeScript v3.0.1
- Jest and ts-jest