Я использую React Testing Library с Jest для тестирования моего приложения React/Redux.
Я хочу протестировать один и тот же компонент в нескольких тестах без совместного использования состояния компонента в каждом экземпляре.
Что-то вроде этого...
import React from "react";
import {renderWithRedux} from '../testUtils';
import App from "../components/App";
describe("App", () => {
test("does something as expected", async () => {
const {container} = renderWithRedux(<App />);
// interact with App
});
test("does something ELSE as expected", async () => {
const {container} = renderWithRedux(<App />); //I DONT WANT THE STATE FROM PREVIOUS TEST
});
});
Проблема, с которой я сталкиваюсь, заключается в том, что состояние первого <App />
«просачивается» в следующий тест, и я хочу, чтобы каждый из моих тестов был независимым. Каков правильный способ добиться этого?
Вот определение renderWithRedux
:
import React from "react";
import { Provider } from "react-redux";
import { createStore, applyMiddleware } from 'redux';
import {reducer, initialState} from "./store";
import thunkMiddleware from 'redux-thunk';
import { render } from '@testing-library/react';
import { Router } from 'react-router-dom'
import { createMemoryHistory } from 'history'
function renderWithRedux(
ui,
{ initialState, store = createStore(reducer, initialState, applyMiddleware(thunkMiddleware)) } = {}
) {
return {
...render(<Provider store={store}>{ui}</Provider>),
store
}
}
пакет.json:
{
"dependencies": {
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-redux": "^7.1.3",
"react-router-dom": "^5.1.2",
"react-scripts": "2.1.5",
"redux": "^4.0.4",
"redux-thunk": "^2.3.0"
},
"devDependencies": {
"@testing-library/jest-dom": "^4.2.3",
"@testing-library/react": "^9.3.2",
"redux-mock-store": "^1.5.3",
"typescript": "^3.7.2"
}
}