I am trying to test my react component's render, but getting the error below: Invariant Violation: _registerComponent(...): Target container is not a DOM element. Error doesn't exist if i change the place where follows render my component on document.body , and it exists if this place is some div with some id in body.
Here my component:
import React, {Component} from 'react';
{render} from 'react-dom';
import Demo from './demo/demo'
import Demo2 from './demo2/demo2'
require('./app-styles.sass')
export class App extends Component {
render() {
return (
<div>
<Demo2 />
<Demo />
<div>Hello jest from react</div>
</div>
);
}
}
render(<App/>, document.getElementById('helloWorldRoot'));
Test of this component:
import React from 'react'
import {shallow, mount} from 'enzyme'
import {App} from './app'
describe('base component', () => {
it('renders as a div', () => {
const application = shallow(<App />);
expect(application).toMatchSnapshot();
});
});
And here is my html:
<!DOCTYPE html>
<html>
<head>
<title>Hello jests' tests</title>
<link rel="stylesheet" href="dist/app.css">
</head>
<body>
<div id="helloWorldRoot"></div>
<script type="text/javascript" src="dist/app.js"></script>
</body>
What is the problem here? I will be glad to some advice.
The file you're testing, app.js
, is attempting to find a DOM element with ID helloWorldRoot
in the last line. This DOM element does not exist when the element is being rendered by Enzyme - hence the error message.
To fix this, separate the <App />
component and rendering of it into two files. Make sure the file that mounts the application to the DOM (let's call it main.js
) does just this one thing and nothing else. The other file, app.js
, can then be tested using Jest and Enzyme.
So main.js should do no more than:
import React from 'react';
import { render } from 'react-dom';
import App from './app';
render(<App/>, document.getElementById('helloWorldRoot'));
And of course the corresponding lines should be removed from app.js
.
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