【问题标题】:How to exit from jest test on some conditions check in beforeAll?如何在某些条件下退出玩笑测试 beforeAll 签入?
【发布时间】:2021-10-26 14:59:21
【问题描述】:

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

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;
  }
});

【问题讨论】:

    标签: jestjs ts-jest


    【解决方案1】:

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

    您可以在 jest.config 文件中进行如下配置:

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

    jest docs中查看更多信息。

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

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

    【讨论】:

    • 谢谢@marcus。这对我有帮助,我可以按照您的建议退出测试。会评估您为测试目的而谈到的有关“数据库存根和其他服务”的任何资源的帮助。如果您认为我应该问一个问题,并且您可以在那里详细回答,那么我会这样做吗?
    【解决方案2】:

    正如@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"
    }
    
    

    【讨论】:

      猜你喜欢
      • 2018-10-27
      • 2021-05-25
      • 2018-11-14
      • 2020-06-30
      • 1970-01-01
      • 2012-09-20
      • 2019-09-13
      • 2018-08-12
      相关资源
      最近更新 更多