使用超测运行Mocha测试时,Express路由永远不会执行
Express routes never execute while running Mocha tests with Supertest
当运行应用程序并直接使用Postman命中它时,这是一个有效的路由:
router.get("/profile", function(req, res) {
var schema = schemas.filter(function(e) { return e.route === "profile"; }).pop();
if (schema !== undefined) {
var schemaJson = require(schema.schemaFile);
return res.status(200).send(schemaJson);
}
});
这里有一个测试:
var schemas = require("../../conf/schemas"),
api_key = require("../../conf/api-keys").pop().key,
app = require("../../app"),
request = require("supertest");
describe("CDM API Get Schema Operations", function() {
it("Returns 404 for schema that do not exist", function (done) {
request(app)
.get("/schemas/profile")
.end(function(err, res) {
expect(res.statusCode).to.equal(500);
//expect(res.body.thing).to.not.equal(null);
done()
});
});
});
在调试模式下运行,到达expect语句,总是带有一个错误。永远无法到达路由中的代码。
我的app.js文件导出app对象(它是一个Express对象)。
var express = require('express'),
logger = require('morgan'),
body_parser = require('body-parser');
var cdm_gateway = require('./middleware/cdm-gateway'),
v1_gateway = require('./middleware/v1-gateway'),
schema_routes = require('./routes/schema'),
member_routes = require('./routes/member');
var app = express();
app.use(cdm_gateway);
app.use("/v1", v1_gateway);
app.use(logger('dev'));
app.use(body_parser.json());
app.use(body_parser.urlencoded({ extended: false }));
app.use('/v1/schemas', schema_routes);
app.use('/v1/member', member_routes);
// Error handling
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500)
.send('error', {
message: err.message,
error: err
});
});
}
app.use(function(err, req, res, next) {
res.status(err.status || 500)
.send('error', {
message: err.message,
error: {}
});
});
app.server = app.listen(3030);
module.exports = app;
错误通常包含不支持的状态码方法。
这是WebStorm的一个问题。在重新安装和重新配置之后,它工作得很好。除此之外我真的没有别的解释
试试这个,改变你的路由和中间件:
<>之前路由器。获取("/profile", function(req, res, next) {Var schema = schema .filter(function(e) {return e.route === "profile";}) .pop ();If (schema !== undefined) {var schemaJson = require(schema.schemaFile);返回res.status (200) .send (schemaJson);} else {var error = new error ('Not Found');错误。状态= 404;下(错误);} });之前<>之前App.use (function(err, req, res, next) {res.status(犯错。状态|| 500) .send ({信息:err.message,错误:{}}); });相关文章:
- 发送json对象或使用express路由呈现视图
- Nodejs和express路由,如何处理客户端的承诺
- 什么'在Express中路由时,应用程序级中间件和路由器级中间件之间的区别是什么
- express js中具有不同功能的动态路由
- 使用Express路由React服务器端
- 将路由处理程序委托给NodeJS+Express中的其他模块
- AngularJS路由服务器端支持(NodeJS+express)
- NodeJS + Express 404 在基本路由上
- 在Express.js中,是否有一个相当于res.locals的路由
- 在Express中转义/:路由以加载js和css
- 通过express路由调用HTML中的Javascript函数
- 可以't通过Express路由从Mongodb中删除文档
- 启用了html5模式的Angular和Express路由
- Node/Express:根的路由标识符'/'路线
- express 4.0主体解析器对路由处理程序不可见
- 使用node/express在angular.js中不工作的路由
- express/如何将路由参数传递到其他文件
- 如何使用 Express 4 路由中的 socket.io 向连接的套接字发出事件
- 如何在 Express.js 中为路由的子路径呈现不同的视图
- 使用虚拟主机中间件在 Express 中按子域指定路由