首页 > 解决方案 > 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 测试的最佳实践。

标签: javascriptjestjsautomated-testsintegration-testingjes

解决方案


当您将 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!');
};

推荐阅读