gpt4 book ai didi

javascript - NodeJs Testrunner 在设置 Express 服务器时卡住/停止

转载 作者:行者123 更新时间:2023-12-05 05:36:34 28 4
gpt4 key购买 nike

我将 Node v18 与实验性测试运行器一起使用。我使用 express 作为 http 集成测试的开发依赖项,它工作正常但有一个测试卡住或停止测试运​​行器(它不会继续)

我用的是TS,但也可以用JS重现,测试文件HttpTests.js包含

import assert from 'assert/strict';
import express from 'express';
import test from 'node:test';

test('Http', async () => {
const server = express();

server.listen(3000);
assert.ok(false);
});

使用 npm 脚本 "test": "node --test $(find . -name '*Tests.js')" 运行它会破坏测试运行程序。

有什么错误或遗漏的想法吗?


为什么我不使用默认的 execution model ?

由于我使用的是 TS,因此我必须找到一种将 ts-node 与测试运行器一起使用的方法。您可以在此处找到更多信息

https://github.com/nodejs/node/issues/43675

所以目前我的 TS 项目正在使用 this npm 脚本,工作正常


复制

我使用和不使用 TypeScript 创建了一个最小的复制存储库

为了复制目的运行mkdir reproduction && cd reproduction && npm init -y && npm install express。之后创建一个 test 目录,其中包含一个包含如上所示内容的文件 HttpTests.js。将 package.json 更改为

{
"name": "reproduction",
"type": "module",
"scripts": {
"test": "node --test $(find . -name '*Tests.js')"
}
}

并运行脚本,测试运行器应该不会完成。


测试运行器仍处于实验阶段

是的,我知道。但是项目中有很多测试都运行良好。一些示例代码

await t.test('subtest - saves data.', async () => {
const expectedResult = {};

const api = express();
const port = await getRandomPort();
const server = api
.use(express.json())
.post('/save', (request, response) => {
response.json(expectedResult);
})
.listen(port);

const httpDataProvider = new HttpDataProvider({ url: `http://localhost:${port}` });
const actualResult = await httpDataProvider.saveSomething();

assert.deepEqual(actualResult, expectedResult);

server.close();
});

最佳答案

问题是您启动的异步事件 (server.listen()) 但在测试错误出现之前没有停止(由 assert.ok(false )).

如果 actualResult 不等于 expectedResult 因为同样的问题 (server.close() 不会被调用)。

解决方法是始终确保服务器最终关闭:

test('Http', async () => {
const app = express();
const server = app.listen(3000);
try {
assert.ok(false);
} finally {
server.close();
}
});

大多数测试框架都提供“前/后”功能,可用于在测试前后设置或拆除辅助对象。

关于javascript - NodeJs Testrunner 在设置 Express 服务器时卡住/停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73288810/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com