上周我用create-react创建了一个React应用程序.

我有一个简单的表单,当我点击提交时会显示一条消息.

我想测试一下,这是我创建的测试SampleForm.test.tsx:

import React from "react";
import { render, fireEvent, screen, waitFor } from "@testing-library/react";
import SampleForm from "./SampleForm";
import "@testing-library/jest-dom/extend-expect"


test("renders submits form", async () => {
    const str = "THIS DIDNT DO ANYTHING";
    const { container, getByText, findByText } = render(<SampleForm />);

    fireEvent.click(screen.getByText("Submit"));

    await waitFor(() => expect(screen.getByText(str)))
});

我在waitFor时出错了

TypeError:MutationObserver不是构造函数

stack trace:

at node_modules/@testing-library/dom/dist/wait-for.js:38:22
      at waitFor (node_modules/@testing-library/dom/dist/wait-for.js:31:10)
      at node_modules/@testing-library/dom/dist/wait-for.js:70:54
      at node_modules/@testing-library/react/dist/pure.js:51:22
      at node_modules/@testing-library/react/dist/act-compat.js:60:24
      at batchedUpdates$1 (node_modules/react-dom/cjs/react-dom.development.js:21856:12)
      at act (node_modules/react-dom/cjs/react-dom-test-utils.development.js:929:14)
      at node_modules/@testing-library/react/dist/act-compat.js:59:20
      at asyncAct (node_modules/@testing-library/react/dist/act-compat.js:38:14)
      at Object.asyncWrapper (node_modules/@testing-library/react/dist/pure.js:50:35)
      at waitForWrapper (node_modules/@testing-library/dom/dist/wait-for.js:70:35)
      at Object.<anonymous> (src/components/SampleForm.test.tsx:18:11)

我try 了几种不同的样式和文本查询更改.从here个样本中提取

This is the straight example i'm trying to get to work

我对添加垫片和回转犹豫不决,因为根据示例,我不应该做任何这些.我想理解为什么这个例子不起作用.

我的package.json:

{
  "name": "intact",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@rjsf/core": "^2.0.0-alpha.6",
    "@testing-library/jest-dom": "^5.3.0",
    "@testing-library/react": "^10.0.2",
    "@testing-library/user-event": "^10.0.1",
    "@types/jest": "^25.1.5",
    "@types/lodash": "^4.14.149",
    "@types/react": "^16.9.0",
    "@types/react-dom": "^16.9.0",
    "@types/react-router-dom": "^5.1.3",
    "bootstrap": "^4.4.1",
    "lodash": "^4.17.15",
    "msal": "^1.2.2",
    "react": "^16.13.1",
    "react-aad-msal": "^2.3.4",
    "react-bootstrap": "^1.0.0",
    "react-dom": "^16.13.1",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.4.1",
    "typescript": "^3.8.3"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@types/fs-extra": "^8.1.0",
    "@types/node": "^13.11.0",
    "@types/rimraf": "^3.0.0",
    "fs-extra": "^9.0.0",
    "rimraf": "^3.0.2",
    "ts-node": "^8.8.1"
  }
}

编辑:04-05-2020

推荐答案

你是最新的CRA吗?如果是这样,那么这个问题https://github.com/facebook/create-react-app/pull/8362可能就是你正在经历的.这可以通过安装https://www.npmjs.com/package/jest-environment-jsdom-sixteen(例如$ yarn add -D jest-environment-jsdom-sixteen)并编辑测试脚本来解决:

 ...
  "scripts": {
    ...
-   "test": "react-scripts test --env=dom"
+   "test": "react-scripts test --env=jest-environment-jsdom-sixteen"
    ...
  },
  ...
  "devDependencies": {
    ...
    "jest-environment-jsdom-sixteen": "^1.0.3",
    ...
  },
  ...

基本上,您会告诉jest使用JSDOMV16而不是v15(jest v25的默认设置).

Typescript相关问答推荐

如果存在一处房产,请确保存在其他房产

物料UI图表仅在悬停后加载行

判断对象A中存在的对象B的键是否存在对象A中键的另一个数组值中

TypScript手册中的never[]参数类型是什么意思?

在TypeScrip中分配回调时,参数的分配方向与回调本身相反.为什么会这样呢?

material 表不渲染任何数据

如何在单击停止录制按钮后停用摄像机?(使用React.js和Reaction-Media-Recorder)

路由链接始终返回到

如何创建一家Reduxstore ?

笛卡尔产品类型

通过泛型函数本身推断受约束的泛型参数的类型脚本问题

如何在Angular 服务中制作同步方法?

如何将类似数组的对象(字符串::匹配结果)转换为类型脚本中的数组?

无法缩小深度嵌套对象props 的范围

编剧- Select 动态下拉选项

顶点堆叠的图表条形图未在正确的x轴上显示

在类型脚本中创建显式不安全的私有类成员访问函数

递归类型别名的Typescript 使用

可以将JS文件放在tsconfig';s includes/files属性?或者,我如何让tsc判断TS项目中的JS文件?

Svelte+EsBuild+Deno-未捕获类型错误:无法读取未定义的属性(读取';$$';)