我认为这个测试用例是多余的,因为您将不得不模拟文档和呈现函数,所以基本上您正在测试的只是有条件的。但也可能有类似的用例。您应该对代码进行以下更改。
function renderToDOM() {
if (root !== null) {
ReactDOM.render(<App />, root)
}
}
renderToDOM();
export {renderToDOM};
import ReactDOM from "react-dom";
import { mock } from "jest";
import { renderToDOM } from "./index";
describe("test ReactDOM.render", () => {
const originalRender = ReactDOM.render;
const originalGetElement = global.document.getElementById;
beforeEach(() => {
global.document.getElementById = () => true;
ReactDOM.render = jest.fn();
});
afterAll(() => {
global.document.getElementById = originalGetElement;
ReactDOM.render = originalRender;
});
it("should call ReactDOM.render", () => {
renderToDOM();
expect(ReactDOM.render).toHaveBeenCalled();
});
});
下面是代码沙盒链接,您可以在其中看到此测试正在运行,测试用例正在传递。
https://codesandbox.io/s/7wr0k7qmq