我有一条这样的路线:
router.delete("/:id?", controller);
当我尝试使用这样的 super 测试来测试该路线时:
const res = await request(app)
.delete(`${url}/credentials/123`)
.send({
payload
});
测试失败,因为在本例中我正在等待 500
expect(res.status).to.be.eql(500);
并且它带有 404,就像路由不存在一样。但是当我在没有可选 id 的情况下尝试测试时,它们通过了预期。
有什么想法会发生什么吗?
最佳答案
这是一个最小的工作示例:
app.js
:
const express = require("express");
const app = express();
const { Router } = require("express");
app.use(express.json());
const router = new Router();
function controller(req, res) {
res.sendStatus(500);
}
router.delete("/:id?", controller);
app.use("/api/credentials", router);
module.exports = app;
app.test.js
:
const app = require("./app");
const request = require("supertest");
const { expect } = require("chai");
describe("57872239", () => {
it("should pass", async () => {
const payload = {};
const url = "/api";
const res = await request(app)
.delete(`${url}/credentials/123`)
.send({ payload });
expect(res.status).to.be.eql(500);
});
});
100%覆盖率的集成测试结果:
57872239
✓ should pass
1 passing (42ms)
-------------|----------|----------|----------|----------|-------------------|
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
-------------|----------|----------|----------|----------|-------------------|
All files | 100 | 100 | 100 | 100 | |
app.js | 100 | 100 | 100 | 100 | |
app.test.js | 100 | 100 | 100 | 100 | |
-------------|----------|----------|----------|----------|-------------------|
源代码:https://github.com/mrdulin/mocha-chai-sinon-codelab/tree/master/src/stackoverflow/57872239
关于javascript - 当 url 有 ? 时,Supertest 会抛出 404对于可选参数,有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57872239/