如何导入路由以使用 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"?
我有一个由 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"?