首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jest:单击按钮引发预期错误时继续测试

Jest:单击按钮引发预期错误时继续测试
EN

Stack Overflow用户
提问于 2022-05-17 20:07:58
回答 1查看 586关注 0票数 1

我试图通过创建一个按钮(测试库中的代码是否显示)来测试一个React边界(使用react-error-boundary库),当单击时,我想验证错误文本是否显示,下面是一些屏幕截图

以下是所使用的两个文件:

  • error-fallback.tsx

代码语言:javascript
复制
import Box from "@mui/material/Box";

function ErrorFallback({ error }: { error: Error; resetErrorBoundary: () => void }) {
  return (
    <Box sx={{ textAlign: "center" }}>
      <p>Error displaying this section</p>
      <pre>{error.message}</pre>
    </Box>
  );
}

export default ErrorFallback;

  • error-fallback.test.tsx

代码语言:javascript
复制
import { render, fireEvent } from "@testing-library/react";
import { ErrorBoundary } from "react-error-boundary";
import Box from "@mui/material/Box";
import { useState } from "react";

import ErrorFallback from "./error-fallback";

const buttonText = "Throw Error";
const errorValue = "This is a test error";

const ThrowError = () => {
  throw new Error(errorValue);
};

export const ErrorFallbackTest = () => {
  const [error, setError] = useState(false);
  const triggerError = () => setError(true);
  return (
    <ErrorBoundary FallbackComponent={ErrorFallback}>
      <Box sx={{ textAlign: "center" }}>
        {error && <ThrowError />}
        <button onClick={triggerError}>{buttonText}</button>
      </Box>
    </ErrorBoundary>
  );
};

it("react boundary works", async () => {
  const { getByText } = render(<ErrorFallbackTest />);

  const buttonTrigger = getByText(buttonText);

  fireEvent(buttonTrigger, new MouseEvent("click", { bubbles: true }));

  const boundaryText = getByText("Error displaying this section");
  expect(boundaryText).toBeInTheDocument();
  expect(boundaryText).toBeDefined();
  expect(boundaryText).toBeVisible();
});

附加Jest错误日志。我不确定哪一种是正确的方法来处理这个问题,我是否应该期望Jest会出错呢?如果希望在单击按钮时抛出错误,我如何添加它?

代码语言:javascript
复制
  ● Console
    console.error
      Error: Uncaught [Error: This is a test error]
EN

回答 1

Stack Overflow用户

发布于 2022-05-17 20:23:53

在这里找到答案

代码语言:javascript
复制
it("react boundary works", async () => {
  const { getByText } = render(<ErrorFallbackTest />);

  const buttonTrigger = getByText(buttonText);

  const spy = jest.spyOn(console, "error");
  spy.mockImplementation(() => {});

  fireEvent(buttonTrigger, new MouseEvent("click", { bubbles: true }));

  const boundaryText = getByText("Error displaying this section");
  expect(boundaryText).toBeInTheDocument();
  expect(boundaryText).toBeDefined();
  expect(boundaryText).toBeVisible();

  spy.mockRestore();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72280076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档