Мне нужно получить доступ и проверить метод дочернего компонента в реакции с использованием Jest.Я не использую энзим , так что это не дубликат этого вопроса или этого вопроса .Я бы хотел использовать React Testing Library вместо Enzyme.
Раньше я с радостью получал доступ к методам, которые мне нужно было проверить, вот так:
import React from "react";
import { render, unmountComponentAtNode } from "react-dom";
import App from "./App";
let container: any = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
test("methodToTest should do what I want it to", () => {
const { methodToTest } = render(<App />, container);
methodToTest("some input");
const output = document.querySelector(".outputFromMethod");
expect(output.innerHTML).toBe("You gave me some input");
});
Но теперь мне нужно обернуть <App />
компонент withRouter()
из react-router-dom
, поэтому я должен сделать что-то вроде этого: (на основе рецепта , предложенного библиотекой React Testing )
import React from "react";
import { BrowserRouter as Router } from "react-router-dom";
import { render, unmountComponentAtNode } from "react-dom";
import App from "./App";
let container: any = null;
beforeEach(() => {
// setup a DOM element as a render target
container = document.createElement("div");
document.body.appendChild(container);
});
afterEach(() => {
// cleanup on exiting
unmountComponentAtNode(container);
container.remove();
container = null;
});
test("methodToTest should do what I want it to", () => {
// THIS DOESN'T WORK NOW FOR GETTING methodToTest
const { methodToTest } = render(<Router><App /></Router>, container);
const output = document.querySelector(".outputFromMethod");
expect(output.innerHTML).toBe("You gave me some input");
});
Я понимаю, что этоне идеально пытаться тестировать методы на дочернем компоненте.Но мне нужно сделать это, потому что мне нужно, чтобы этот компонент рендерился внутри <Router>
.Есть ли способ получить доступ к методам компонентов <App />
без использования фермента или библиотеки React Testing, если это необходимо?