gpt4 book ai didi

javascript - Supertest:如何为发布到另一个 API 端点的 API 端点编写测试?

转载 作者:行者123 更新时间:2023-12-02 22:25:19 25 4
gpt4 key购买 nike

我正在使用 supertest 来测试我的 API 端点。我在一个端点上发布了一篇文章,又向另一个端点发布了另一篇文章,即使该端点已实现,我也会收到 404 错误。这是因为我没有在 supertest 使用的 server 中执行 listen() ,并且由于 supertest 不知道测试中的此端点,因此似乎合乎逻辑:我收到 404 错误。执行 listen 并不是一个明智的选择,因为我在多个文件中进行了多次测试,并且我不想遇到 地址已在使用中的错误

解决此问题的一种方法是在运行测试之前启动另一台服务器作为预测试,以便端点在测试期间可用,但应该有更好的方法。

这是我的服务器

// server.js
const express = require('express')
const app = express()

// Middlewares...
// Routes...
post(/abc) // abc posts to def during the test
post(/def)

module.exports = app

这是start.js,与测试无关,只是进行监听,我用它进行本地手动测试

// start.js
const app = require('./server.js')
app.listen(3000)

最佳答案

解决方案如下:

server.js:

const express = require('express');
const request = require('request-promise');
const app = express();

app.post('/abc', async (req, res) => {
const url = req.protocol + '://' + req.get('host');
const rval = await request.post(`${url}/def`);
res.send(rval);
});
app.post('/def', (req, res) => {
res.send('def');
});

module.exports = app;

start.js:

const app = require('./server.js');
const s = app.listen(3000, () => {
console.log(`HTTP server is listening on http://localhost:${s.address().port}`);
});

server.test.js:

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

describe('server', () => {
it('should pass', (done) => {
supertest(app)
.post('/abc')
.expect(200)
.end((err, res) => {
if (err) throw err;
expect(res.text).toBe('def');
done();
});
});
});

集成测试结果与覆盖率报告:

 PASS  src/stackoverflow/59090082/server.test.js
server
✓ should pass (54ms)

-----------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
-----------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
server.js | 100 | 100 | 100 | 100 | |
-----------|----------|----------|----------|----------|-------------------|
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 5.208s, estimated 13s

源代码:https://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/59090082

关于javascript - Supertest:如何为发布到另一个 API 端点的 API 端点编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59090082/

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