我有一个由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/