我们将app.js配置为在从测试运行时在不同的端口上启动,以便我们可以让dev服务器在其常规端口上同时运行(使用nodemon)。下面是我们的代码:
// Start server.
if (process.env.TEST == 'true') {
var port = process.env.PORT || 3500; // Used by Heroku and http on localhost
process.env['PORT'] = process.env.PORT || 4500; // Used by https on localhost
}
else {
var port = process.env.PORT || 3000; // Used by Heroku and http on localhost
process.env['PORT'] = process.env.PORT || 4000; // Used by https on localhost
}
http.createServer(app).listen(port, function() {
console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
});
// Run separate https server if not on heroku
if (process.env.HEROKU != 'true') {
https.createServer(options, app).listen(process.env.PORT, function() {
console.log("Express server listening with https on port %d in %s mode", this.address().port, app.settings.env);
});
};
然后,摩卡文件,像这样的一个测试图标的服务,看起来是这样的:
process.env['TEST'] = 'true'; // Use test database
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0" // Avoids DEPTH_ZERO_SELF_SIGNED_CERT error for self-signed certs
var request = require("request").defaults({ encoding: null });
var crypto = require('crypto');
var fs = require('fs');
var expect = require('expect.js');
var app = require("../../app.js");
var hash = function(file) { crypto.createHash('sha1').update(file).digest('hex') };
describe("Server", function() {
after(function() {
process.env['TEST'] = 'false'; // Stop using test database.
});
describe("Static tests", function() {
it("should serve out the correct favicon", function (done) {
var favicon = fs.readFileSync(__dirname + '/../../../public/img/favicon.ico')
request.get("https://localhost:" + process.env.PORT + "/favicon.ico", function (err, res, body) {
// console.log(res)
expect(res.statusCode).to.be(200);
expect(hash(body)).to.be(hash(favicon));
done();
});
});
});
});
同时还要注意的呼噜声是一个伟大的工具,你可以从package.json脚本部分调用mocha,然后运行npm test
来运行它。
如何关闭测试服务器?这是在测试完成时发生,还是只让它运行? – Patrick
当摩卡结束运行时服务器自动停止。请注意,如果您需要手动停止某些功能,则可以使用摩卡咖啡功能。 – dankohn