如何使用Supertest导入测试路线?

时间:2016-01-22 19:23:19

标签: node.js express mocha 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);
  });
});

您是否注意到我在app.get()声明之后说require()的方式?我不想在这里这样做。我希望能够从我项目的routes目录导入我的路线。

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

1 个答案:

答案 0 :(得分:4)

不需要将路由导入测试文件。在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"?