我正在尝试使用 mocha 创建一个独立的测试套件,在完美的世界中,它将启动我的 express.js 应用程序,使用 zombie 来呈现页面,检查一堆东西,然后拆除/杀死 express。 .js 应用程序。
有没有简单/最好的方法来做到这一点?
注意。我可以在运行测试之前运行 express 应用程序服务器,但是如果你不打算刮牦牛,那有什么用呢。
最佳答案
首先,您需要将您的实际应用设置移动到一个模块中,并将其导入到实际启动您的应用的文件中。现在这是分开的,您可以在实际收听之前让应用程序处于完整状态。
你应该将你的应用程序的实际设置移动到一个单独的文件中,我们称之为 app.js,可以从你运行 Node 的文件中调用监听,我们称之为 index.js。
所以,app.js 看起来像:
var express = require('express')
, routes = require('./routes');
var app = module.exports = express.createServer();
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', routes.index);
index.js 看起来像:
var app = require('./app');
app.listen(3000, function(){
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});
这将您的应用程序的加载与实际监听分开,允许您将该应用程序加载到您的单元测试中。
在你的单元测试中,你会在 setup 方法和 teardown 方法中做一些事情来启动和关闭服务器。
在文件 test/app_tests.js 中:
describe('app', function(){
var app = require('../app');
beforeEach(function(){
app.listen(3000);
});
// tests here
afterEach(function(){
app.close();
})
});
关于node.js - 使用 mocha 设置/拆卸 express.js 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965984/