[英]NodeJs Testrunner freezes / stops when setting up Express server
我將 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')"
會破壞測試運行器。
任何想法有什么問題或缺失?
為什么我不使用默認執行 model ?
由於我使用的是 TS,因此我必須找到一種將 ts-node 與 testrunner 一起使用的方法。 您可以在這里找到更多信息
https://github.com/nodejs/node/issues/43675
所以目前我的 TS 項目正在使用這個npm 腳本,它工作正常
再生產
我創建了一個最小的復制存儲庫,有和沒有 TypeScript
出於復制目的,運行mkdir reproduction && cd reproduction && npm init -y && npm install express
。 之后,使用包含如上所示內容的文件HttpTests.js創建一個測試目錄。 將package.json更改為
{
"name": "reproduction",
"type": "module",
"scripts": {
"test": "node --test $(find . -name '*Tests.js')"
}
}
並運行腳本,testrunner 不應該完成。
測試運行器仍處於試驗階段
是的,我知道。 但是該項目中有許多測試工作得非常好。 一些示例代碼
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
server.close()
實際結果不等於expectedResult
結果,您的第二個測試用例也可能會停止。
一種解決方法是始終確保服務器最終關閉:
test('Http', async () => {
const app = express();
const server = app.listen(3000);
try {
assert.ok(false);
} finally {
server.close();
}
});
大多數測試框架提供“之前/之后”功能,可用於在測試之前和之后設置或拆除輔助對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.