未找到 supertest 错误测试快速端点

Han*_*anz 6 node.js express supertest jestjs

我尝试设置 jest、supertest 和 express,但失败了。我有这两个简单的文件

索引.js

const express = require("express");
const app = express();
const port = 3000;

app.get("/", (req, res) => res.send("Hello World!"));

app.listen(port, () => console.log(`Example app listening on port ${port}!`));
Run Code Online (Sandbox Code Playgroud)

和 index.test.js

const express = require("express");
const app = express();
const request = require("supertest");

describe("/", () => {
  test("it says hello world", done => {
    request(app)
      .get("/")
      .expect(200)
      .end(function(err, res) {
        console.log("err", err);
      });
  });
});
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我收到此错误。 err Error: expected 200 "OK", got 404 "Not Found"

怎么了?

我在浏览器中访问 localhost:3000 我可以看到“Hello World!”

Yil*_*maz 5

你应该重构 index.js 并创建 app.js

应用程序.js

const express = require("express");
const app = express();
app.get("/", (req, res) => res.send("Hello World!"));
Run Code Online (Sandbox Code Playgroud)

索引.js

const app = require('./app')
const port = process.env.PORT
app.listen(port, () => { console.log(`listening on ${port}) . })
Run Code Online (Sandbox Code Playgroud)

我们像这样重构代码的原因是我们需要访问 express app() 但我们不希望“听”被调用。

in your test file

const request = require("supertest");
const app = require("../src/app");

describe("/", () => {
  test("it says hello world", done => {
    request(app)
      .get("/")
      .expect(200)
      .end(function(err, res) {
        console.log("err", err);
      });
  });
});
Run Code Online (Sandbox Code Playgroud)

  • app.js 末尾还需要 `module.exports = app;` (2认同)