Superset uses Jest and React Testing Library (RTL) to write unit and integration tests. In the past we used
First and foremost: We have a
The main thing you want to keep in mind is the different approaches each testing library uses in testing:
Enzyme is code-focused testing. It tests things in the "back" of the code that the user never sees, such as the props of a component.
RTL is user-focused testing. All of your tests will rely on things the user can see and do.
For example: If there were an Enzyme test that checks the props of a component, you would look for where those props show visually on the component and capture it with RTL.
Except for certain things like API mocking, Superset uses fetch-mock for that.
The test environment in Superset is getting healthier and easier to work with by the day, and I hope this will inspire you to help contribute to the cause!
To wrap this up, I would like to leave you with some good RTL/testing resources:
screen.debug()
This will show you the rendered component in the console when you run the test. You can pass in a captured element if you want to see just that element instead of the whole rendered component.
screen.logTestingPlaygroundURL()
This will give you a link in the console when you run your test. Click this link and it will open an instance of the testing playground displaying your rendered component (or a captured element passed into the function) in the browser.
const button = screen.getByRole('button');
screen.debug(button);
screen.logTestingPlaygroundURL(button);