首页 > 解决方案 > 开玩笑的“顶级”测试

问题描述

在开玩笑地编写集成测试时,我想通过以下方式重现我在 mocha 中实现的相同行为 mocha -r ts-node/register tests/integration/topLevelTest.test.ts 'tests/integration/**/*.test.ts'

topLevelTest.test.ts :

let importantVariable;

describe("should do something with my variable", () => {
  importantVariable = returnSomethingImportant();

  it("should important variable exists", () => {
    should.exist(importantVariable)
  })
})

after(() => {
  importantVariable.cleanUp()
})

行为很简单:首先 topLevelTest 执行 describe,然后其他测试套件自己执行,最后在 topLevelTest 之后执行

在我尝试改写它以开玩笑时,我写了一些非常相似的东西。唯一的区别是我使用afterAll而不是after。结果是:首先执行 topLevelTest 描述,然后执行afterAll,然后执行其他测试套件。是否可以让 afterAll 在其他测试套件之后运行?

标签: node.jsjestjs

解决方案


这就是设置文件的用途,更具体地说,setupFilesAfterEnv因为 Jest 环境已经在那里初始化,并且全局变量可用。

afterAll未分组的顶级describe适用于当前测试套件中的所有测试。由于 Jest 测试在不同的线程中并行运行(除非runInBand指定选项),它显然不会影响其他测试套件。

如果设置失败并且不需要来自设置的数据,则测试不需要继续,globalSetup并且应该使用 globalTeardown 配置选项。这不是测试,但主要区别在于describe单独test的块不可用。全局期望不可用,但可以导入,如果设置失败,这会导致有意义的错误:

// setup.js
let expect = require('expect');
module.exports = async () => {
  let server = ...;
  expect(server)...;
  global.__MYSERVER__ = server;
};

// teardown.js
module.exports = async function () {
  // close __MYSERVER__
};

由于全局设置和拆卸在父进程中运行,__MYSERVER__因此无法在测试中访问。


推荐阅读