如何导入路由以使用 Supertest 进行测试?

How do I import routes for testing with Supertest?

我有一个由 Mocha 测试的应用程序,我能够使用我现在拥有的东西成功地 运行 我的测试,但是我明确地设置了一个 GET 路由到 /api/v1 在我的测试文件中。这是测试文件...

API.js:

var request = require('supertest');
var express = require('express');
var app = express();
var router = express.Router();

app.get('/api/v1', function (req, res, next) {
  res.json({
    "Hello": "World"
  });
});

describe('API', function () {
  it("Says 'Hello' is 'World'", function (done) {
    request(app)
      .get('/api/v1')
      .expect('Content-Type', /json/)
      .expect(200, {
        Hello: 'World'
      }, done);
  });
});

你有没有注意到我在 require() 语句之后说 app.get()?我不想在这里这样做。我希望能够从项目的 routes 目录中导入我的路线。

我很难相信我应该在我的测试文件中复制所有这些路由。我要如何从 routes 目录导入路由以用于此测试文件?

不需要将路由导入到测试文件中。一旦在 express.Router 对象上定义了路由,并且 app 使用路由器,则 app 只需要从主应用程序文件中导出。

您将在单独的文件中定义路由并导出路由器。 routes.js

var express = require('express');
var router = express.Router();

// Define routes
router.get('/api/v1', function (req, res, next) {
  res.json({
    "Hello": "World"
  });
});

// Export the router. This will be used in the 'app.js' file.

app.js

//Import the router
var router = require('./routes');

// Use the router as middleware for the app. This enables the app to
// respond to requests defined by the router.
app.use('/', router);

// Export the app object
module.exports = app;

app.spec.js

// Import the app
var app = require('./app');

// Use the app object in your tests
describe('API', function () {
  it("Says 'Hello' is 'World'", function (done) {
    request(app)
      .get('/api/v1')
      .expect('Content-Type', /json/)
      .expect(200, {
        Hello: 'World'
      }, done);
  });
});

express.Router 帮助组织您的路线。问题在这里得到了完美的回答:What is the difference between "express.Router" and routing using "app.get"?