我使用express.js創建了一個簡單的Web應用程序,並且想用jasmine-node進行測試。到目前爲止工作正常,但我的問題是,我必須手動啓動服務器,每次我可以運行我的測試。自動化Jasmine-Node和express.js
請問如何編寫一個spec-helper來運行服務器(使用另一個端口,然後是我的開發工具),僅用於測試,然後殺死它?
我使用express.js創建了一個簡單的Web應用程序,並且想用jasmine-node進行測試。到目前爲止工作正常,但我的問題是,我必須手動啓動服務器,每次我可以運行我的測試。自動化Jasmine-Node和express.js
請問如何編寫一個spec-helper來運行服務器(使用另一個端口,然後是我的開發工具),僅用於測試,然後殺死它?
這是我做的:
我有一個server.js文件我的節點項目的根目錄下建立節點內部應用程序lication服務器(與快遞)和出口2種方法:
exports.start = function(config, readyCallback) {
if(!this.server) {
this.server = app.listen(config.port, function() {
console.log('Server running on port %d in %s mode', config.port, app.settings.env);
// callback to call when the server is ready
if(readyCallback) {
readyCallback();
}
});
}
};
exports.close = function() {
this.server.close();
};
的app.js文件將在這一點很簡單:
var server = require('./server');
server.start({ port: 8000 });
所以文件/文件夾的基本結構會是以下:
src
app.js
server.js
有了這種分離將允許你正常運行服務器:
node src/app.js
.. 和/或要求它從一個自定義節點腳本,這可能是一個節點腳本(或傑克/咕嚕/任何任務),執行你的測試是這樣的:
/** my-test-task.js */
// util that spawns a child process
var spawn = require('child_process').spawn;
// reference to our node application server
var server = require('./path/to/server.js');
// starts the server
server.start({ port: 8000 }, function() {
// on server ready launch the jasmine-node process with your test file
var jasmineNode = spawn('jasmine-node', [ '.path/to/test/file.js' ]);
// logs process stdout/stderr to the console
function logToConsole(data) {
console.log(String(data));
}
jasmineNode.stdout.on('data', logToConsole);
jasmineNode.stderr.on('data', logToConsole);
jasmineNode.on('exit', function(exitCode) {
// when jasmine-node is done, shuts down the application server
server.close();
}
});
好吧,我知道了。如果你現在告訴我如何擺脫服務器輸出(例如:_GET/200 46ms - 167_)在我的測試輸出所有東西:) – optikfluffel
好像你有你的節點服務器應用程序配置記錄請求,用於表達的Profiler中間件可能是?檢查您的快遞服務器代碼;) – BFil
對不起,發現一個被遺忘的app.use(express.logger('dev'));謝謝^^ – optikfluffel
我使用摩卡 - 這是該死的類似 - 但同樣的原則應該適用:您可以嘗試require
app.js
文件在主要describe
內的'beforeEach'鉤子文件。這應該爲你啓動。
好了,然後啓動並且測試正在運行,但是如果我使用--autotest選項(或類似),它不會停止並失敗,如果我只想運行一次測試,它不會停止。最重要的是,我現在在我的測試輸出中有了http輸出(GET/200 6ms - 167)。我如何擺脫這一點? – optikfluffel
你有這樣的例子嗎? – chovy
下面是一個輸出示例:http://pastebin.com/9qF1NeU1 以及server_spec.coffee:http:// pastebin。com/uvcBuTiy – optikfluffel
假設你使用一些代碼,調用在server.js app.listen()
,不需要在每次運行該文件,但只有一次,然後有兩個功能,如
startServer = -> app.listen(3000)
stopServer = -> app.close()
然後你就可以在beforeEach
使用這些和afterEach
沒有得到它的工作,來自@ShadowCloud的片段很好:) – optikfluffel
如果你想要然後走一步在自動化您的測試,而你開發,你可以去你的終端線路,並執行
jasmine-node . --autotest
茉莉花然後將保持列表引用到項目中的每個文件,並且每當你修改一個文件時,它都會告訴你這段代碼是否會破壞你的任何測試;)
你運行的是什麼版本的express? – srquinn
我正在使用版本3.x(現在3.0.2)。 – optikfluffel