我有一个由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
目录导入路由以在此测试文件中使用?
答案 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"?