如何在某些情况下退出开玩笑测试?

How to exit from jest test on some conditions check in beforeAll?

我使用 Jest 进行 运行 测试。 我正在启动一个测试服务器,它使用测试 table 进行数据插入和读取。因此,我想要实现的是首先检查 beforeAll 运行ning 环境是否正在测试,因为我将部署在服务器上,这样它就不会 运行 测试如果存在一些错误并且服务器不是测试服务器,则为生产数据库。 因此,为此我有一个提供环境的端点,我想在 beforeAll 中调用该端点,然后如果环境是测试继续并以其他方式执行测试用例,我不想 运行 测试用例。 我怎样才能在 Jest 中做到这一点? 下面是我想要 运行 但 returnthrowprocess.exit 没有任何东西退出测试用例和所有测试 运行s.

beforeAll(async () => {
  const GET_ENVIRONMENT_QUERY = gql`
    query GetEnvironment {
      getEnvironment
    }
  `;
  const loggedInClient = createApolloClientInstance("LOGGEDIN");
  const response = await loggedInClient.query({
    query: GET_ENVIRONMENT_QUERY,
  });
  if (response.data.getEnvironment !== "TEST_") {
    console.log("Here it should exit");
    return;
  }
});

如果我认为您只想在 'test' 环境下 运行 测试是正确的,那么这听起来像是您可以在设置文件中完成的事情。

您在 jest.config 文件中配置如下:

{
    ...,
    globalSetup: `path/to/your/setup.js/file`,
    ...
}

jest docs 中查看更多相关信息。

beforeAll 代码传输到此文件,这将是 运行 在任何测试 运行 之前。然后在你的 setup.js 文件中,如果环境不是你想要的,你可以简单地 process.exit(1) (可能向用户提供有用的信息)。

顺便说一句,我要补充一点,你真的应该 运行 在所有环境中进行测试 - 可能你需要的不是你当前的设置,而是你的数据库和其他用于测试的服务的存根目的,但这是一个单独的问题。

正如@marcus 在第一个答案中所建议的那样。 我做到了,现在我的 setup.ts 文件看起来像这样。

import gql from "graphql-tag";
import { createApolloClientInstance } from "./clients";

module.exports = async () => {
  const GET_ENVIRONMENT_QUERY = gql`
    query GetEnvironment {
      getEnvironment
    }
  `;
  const loggedInClient = createApolloClientInstance("LOGGEDIN");
  const response = await loggedInClient.query({
    query: GET_ENVIRONMENT_QUERY,
  });
  if (response.data.getEnvironment !== "TEST_") {
    console.log("The environment is not test, please run test on test-server");
    process.exit(1);
  }
};

jest.config.json 如下所示

{
  "roots": ["<rootDir>/tests"],
  "transform": {
    "^.+\.tsx?$": "ts-jest"
  },
  "testRegex": "/tests/.*.spec.(js|ts|tsx)?$",
  "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"],
  "globalSetup": "./tests/setup.ts"
}