node.js - 开玩笑的“顶级”测试
问题描述
在开玩笑地编写集成测试时,我想通过以下方式重现我在 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 在其他测试套件之后运行?
解决方案
这就是设置文件的用途,更具体地说,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__
因此无法在测试中访问。
推荐阅读
- python - Python。文档字符串是可写的吗?好像是
- elasticsearch - 在 elasticsearch 中监控执行的搜索查询
- python - Python - Matplotlibs - 如何格式化并将间隔添加到具有日期和时间的 X 轴?
- javascript - 我想通过滚动来调整图像大小;但是,我的功能似乎是错误的。如果条件正确,我无法使用
- c# - Unity C# 错误:“类型或命名空间定义,或预期文件结尾”
- hadoop - 如何通过 Helm Chart 在 Kubernetes 中安装 Hadoop?
- python - 基于类的视图和查询集中 request.user 的 Python Django 最佳实践
- r - 使用 R 在 Firefox 中创建当前打开的 URL 的向量
- css - 如何从 Angular (2+) 生成缩小的 css
- installation - 在 R studio 1.2.1335 和 macOS Sierra 10.12.6 中使用 BiocManager::install 安装“org.Hs.eg.db”时出现问题