gpt4 book ai didi

javascript - 使用 supertest 启动和停止服务器

转载 作者:行者123 更新时间:2023-12-05 06:17:30 25 4
gpt4 key购买 nike

我有以下服务器类:

import express, { Request, Response } from 'express';

export default class Server {
server: any;

exp: any;

constructor() {
this.exp = express();
this.exp.get('/', (_req: Request, res: Response) => {
res.json('works');
});
}

start(): void {
this.server = this.exp.listen(3000);
}

stop(): void {
this.server.close();
}
}

我正在使用 supertest 进行端到端测试。我希望在所有测试之前启动我的应用程序,并在测试完成后停止它。

使用 beforAll 和 afterAll 很容易做到这一点,我只需一次实例化 Server 类并调用启动和关闭方法。

但由于我有 10 多个 Controller 要测试,我想避免在每个测试文件期间启动和停止服务器。

我在文档中找到了 setupFilessetupFilesAfterEnv 但我无法停止服务器,因为实例在这两个文件中没有“共享”。

这是 1 个测试文件的示例:

import supertest from 'supertest';

describe('Album Test', () => {
let app: App;

beforeAll(async (done) => {
app = new App();

await app.setUp(); // database connection (not mentionned in the preivous example)
done();
});

afterAll(async (done) => {
await app.close();

app.server.stop();
done();
});

const api = supertest('http://localhost:3000');

it('Hello API Request', async () => {
const result = await api.get('/v1/user');
expect(result.status).toEqual(200);
...
});
});

这完全没问题,但我在每个测试文件中都复制了 beforeAll 和 afterAll 方法。有没有办法只声明一次?

谢谢

最佳答案

试一试吧

const supertest = require('supertest')
const app = require('../../app')

describe('int::app', function(){

let request = null
let server = null

before(function(done){
server = app.listen(done)
request = supertest.agent(server)
})

after(function(done){
server.close(done)
})

it('should get /api/v1/laps/85299', function(){
return request.get('/api/v1/laps/85299')
.expect(200, { data: {} })
})

})

关于javascript - 使用 supertest 启动和停止服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61659975/

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