【发布时间】:2017-10-11 15:03:51
【问题描述】:
我是 NodeJS / Express 的新手,我遇到了与全局/模块共享模块和配置设置相关的问题,我将在此处尝试解释。
一个简单的例子是尝试对包含其他库的中间件模块进行单元测试。如下:
config/settings.js
module.exports = {
...,
debugLevel: 3
};
中间件/auth.js
// Required modules for middleware
// ----------------------------------------------------------------------
var config = require('../config/settings');
var log = require('../libraries/logger')('middlewares/auth');
...
// Middleware methods
// ----------------------------------------------------------------------
var middleware = {};
middleware.apicall = function(req, res, next) {
...
log.info('Made api call');
};
库/logger.js
// External Dependencies
var winston = require('winston');
var winlogger = new (winston.Logger)({
transports: [
new (winston.transports.Console)()
]
});
winlogger.cli();
var logger = function(module, debug) {
this.module = module;
this.logger = winlogger;
this.debugLevel = debugLevel;
};
logger.prototype = {
module: '',
logger: null,
debugLevel: 3,
/**
* Generic Log function
*
* @param level
* @param str
* @param data
*/
debug: function(level, str, data) {
if ( this.debugLevel > 2) this.logger.log(level, this.module+' - '+str, data);
},
/**
* Specific function for info
*
* @param str
* @param data
*/
info: function(str, data) {
if ( this.debugLevel > 1 ) this.logger.info(this.module+' - '+str, data);
}
};
tests/api.js
const chai = require('chai');
const should = chai.should;
const expect = chai.expect;
const assert = chai.assert;
// Node Http Mocks
var httpMocks = require('node-mocks-http');
var middleware = require('../middlewares/auth');
describe("Test API Call", function() {
it("should give 200 over api call", function(done) {
var req = httpMocks.createRequest({
method: 'GET',
url: '/test',
params: {}
});
var res = httpMocks.createResponse();
middleware.apicall(req, res, function(res) { return res; });
assert.equal(res.statusCode, 200);
done();
});
});
现在所有这些都可以了,但我遇到的问题是:如何在不显示 apicall 方法的日志行的情况下进行测试?
有没有办法让设置全局存在?或者一种构建应用程序的方法,以便您可以将来自单个要求的设置注入 app.js ?
我需要在 tests/api.js 中做这样的事情:
var config = require('../config/settings');
config.debug = 0;
并可能将其注入测试。有人遇到过类似的挑战吗?
【问题讨论】:
标签: javascript node.js unit-testing express