Reactjs 为什么';当我开玩笑地使用react测试库、react.lazy和suspence运行同一个测试两次时,加载程序是否在第二个测试中显示?

Reactjs 为什么';当我开玩笑地使用react测试库、react.lazy和suspence运行同一个测试两次时,加载程序是否在第二个测试中显示?,reactjs,jestjs,react-suspense,testing-library,react-lazy-load,Reactjs,Jestjs,React Suspense,Testing Library,React Lazy Load,这是我的代码示例 // App.js import React, { Suspense, lazy } from "react"; const Loader = () => <div data-testid="loader">Loading...</div> const Login = lazy(() => import("./Login")); function App() { retu

这是我的代码示例

// App.js

import React, { Suspense, lazy } from "react";

const Loader = () => <div data-testid="loader">Loading...</div>

const Login = lazy(() => import("./Login"));

function App() {
  return (
    <Suspense fallback={<Loader />}>
      <Login />
    </Suspense>
  );
}

export default App;

//App.js
从“React”导入React,{suspent,lazy};
常量加载器=()=>正在加载。。。
const Login=lazy(()=>import(“./Login”);
函数App(){
返回(
);
}
导出默认应用程序;
//Login.js
从“React”导入React;
const Login=()=>Login
导出默认登录名
//App.test.js
从“React”导入React;
从'@testing library/react'导入{render,waitForElementToBeRemoved,cleanup};
从“./App”导入应用程序;
描述('用户未登录时的应用',()=>{
它(“应该重定向到登录页面”,异步()=>{
beforeach(()=>jest.resetAllMocks())
const{getByTestId,getByText}=render(

断言该元素存在于文档中,顾名思义:

expect(linkElement).not.toBeNull()
jest dom实用程序库提供了.toBeInTheDocument()匹配器,可用于断言元素是否在文档体中。这比断言查询结果为null更有意义

该组件在第二次测试中被呈现为分离的
容器
元素,并且在文档DOM中不存在,因此测试失败

相反,可以使用基本的Jest断言,如下所示:

expect(linkElement).not.toBeNull()

可能没有理由使用自定义容器,除非需要测试组件在分离元素中的工作方式。

FYI,您发布的repl复制了应用程序在生产中的工作方式,但没有测试,因此无法用于调试问题。
expect(linkElement).not.toBeNull()