テストから実行するときに別のポートで起動するように app.js を構成します。これにより、(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);
});
};
次に、favicon の提供をテストするこのような mocha ファイルは、次のようになります。
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();
});
});
});
});
また、grunt は優れたツールですが、package.json スクリプト セクションから mocha を呼び出しnpm test
て実行することもできます。