我有一个由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);
  });
});


您是否注意到app.get()语句后我怎么说require()?我不想在这里做。我希望能够从项目的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"?

关于node.js - 如何导入用于通过Supertest进行测试的路线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34954378/

10-12 06:42