javascript - Jest 检测到以下 2 个可能阻止 Jest 退出的打开句柄:
问题描述
我是测试新手。我正在使用 JEST 来测试我的 nodejs API。当我在一个文件中编写所有测试时,它可以正常运行而没有任何错误,但是当我将其分离时,它给我的端口已经在使用中。对于每个文件,它运行不同的节点实例。
我写这个来测试的两个文件
const supertest = require('supertest');
const app = require('../index');
describe('API Testing for APIs', () => {
it('Healthcheck endpoint', async () => {
const response = await supertest(app).get('/healthcheck');
expect(response.status).toBe(200);
expect(response.body.status).toBe('ok');
});
});
我如何将我的测试分隔在不同的文件中以更好地组织我的测试,或者无论如何组织测试文件。
PS - 请建议编写 NodeJS api 测试的最佳实践。
解决方案
当您将 Express 与 Jest 和 Supertest 一起使用时,您需要将 Express 应用程序定义和应用程序监听分成两个不同的文件。Supertest 不在任何端口上运行。它模拟对 Express 应用程序的 HTTP 请求响应。它会是这样的:
文件:app.js
const express = require('express');
const app = express();
app.get('/healthcheck', (req, res) => {
res.json({msg: 'Hello!'});
};
module.exports = app;
文件:index.js
const app = require('./app');
app.listen(3000);
文件:index.test.js
const request = require('supertest');
const app = require('./app');
test('Health check', async () => {
const response = await request(app)
.get('/healthcheck')
.send()
.expect(200);
expect(response.body.msg).toBe('Hello!');
};
推荐阅读
- c++ - 在 Qt Creator 中将库链接到 CMake (MSVC)
- html - 将图标与下拉实现中的文本对齐
- r - 如何在 tidygraph 对象上使用 furrr 应用映射函数?
- android - 如何为 android qpython 创建模块
- php - PHP图像旋转旋转到固定位置
- algorithm - 针对涉及计算 2 个或更多数字的唯一倍数的问题优化空间复杂度?
- laravel - Laravel Factory 为每个未隔离的相同工厂调用之间创建
- r - 从模拟网格的历史中查找单元的合并时间
- javascript - SyntaxError: "JSON.parse: unexpected non-whitespace ..." 当从 PHP 返回 JSON
- bash - 我如何保持从其他人那里下载的更新的 Github 存储库?