javascript - 当 url 有 ? 时,Supertest 会抛出 404对于可选参数,有什么想法吗?

标签 javascript node.js supertest

我有一条这样的路线:

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/

相关文章:

arrays - 保存数组 Mongoose

javascript - 使用 mocha 和 super 测试进行 NodeJS HTTPS API 测试 -"CERT_HAS_EXPIRED"

node.js - 在 express 应用程序中测试默认错误处理程序会导致超时

javascript - 将 promise 一一链接起来,直到返回不为空的结果

node.js - 从 Mongoose promise 返回响应

javascript - 如何根据用户在 node.js 中的输入创建我的 mongodb 查询?

javascript - supertest 在每次测试时更改 url

javascript - 如何正确地从 Promise 返回多个值?

javascript - 停止滚动页面,滚动 div

javascript - 如果从另一个 NodeJS 函数调用,则将 csv 转换为 JSON 返回空 json