繁体   English   中英

使用 mocha 测试快速路由器

[英]Test express router with mocha

我遇到了一个关于 express (node.js) 中路由的奇怪行为。

我试图测试一个api。

服务器安装:

app.use("/", productRouter);
app.use("/", testRouter);

productRouter.post("/products", ...);
testRouter.post("/test", ...);

如果我POST到:

http://localhost:MYPORT/test
http://localhost:MYPORT/products

一切正常。

但是如果我运行这个 mocha 测试:

const app = require("../src/index");

describe(" ====== Test for argumentMiddleware: a factory to check request arguments ======", () => {
  describe("requiredArgument middleware", () => {
    it("it should return error if requiredArgument is not in the body of request:", done => {
      let requestBody = {
        argument: "product"
      };
      chai
        .request(app)
        .post("/test")
        .send(requestBody)
        .end((err: Error, res: any) => {
          res.should.have.status(400);
          console.log(err.message);
          done();
        });
    });
    it.skip("it should pass if requiredArgument is in the body of request: ", done => {
      let requestBody = {
        requiredArgument: "product"
      };
      chai
        .request(app)
        .post("/test")
        .send(requestBody)
        .end((err: Error, res: any) => {
          res.should.have.status(200);
          done();
        });
    });
  });
});

我确定它对/products而不是/test进行POST ,我在/products中有一个被执行的console.log 为什么它被路由到那个端点,它发生只是因为它首先被声明?

这部分看起来很奇怪:

app.use("/", productRouter);
app.use("/", testRouter);

如果您更改 testRouter 的("/")部分并可能使其像这样,会发生什么:

app.use(testRouter);

或者

app.use("/api", testRouter);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM