![](/img/trans.png)
[英]Node.js: Shall I use Vows or Expresso or NodeUnit or Zombie.js or All?
[英]Strange error when I use vows in node.js
我正在嘗試使用誓言使用BDD啟動我的node.js項目。 然后我得到了這個奇怪的錯誤。
我試圖用誓言為Express編寫小型路由測試,這是我的原始代碼,
node_server.prototype.mainpage = function(callback) {
http.get({host:'localhost', port:this.port, path:'/', agent:false}, function(res){
callback(res.statusCode);
});
}
這是我寫誓言測試的方式
vows.describe('Request to the server').addBatch({
'Should get http 200': {
topic: function () {
app_server.mainpage(this.callback)
},
'we get 200': function (statusCode) {
app_server.close_server();
assert.equal(statusCode, 200);
}
},
}).run(); // Run it
即使statusCode正確,誓言也會始終報告意外錯誤,就像這樣
» An unexpected error was caught: 200
所以我這樣改變我的主頁功能
node_server.prototype.mainpage = function(callback) {
http.get({host:'localhost', port:this.port, path:'/', agent:false}, function(res){
callback("error", res.statusCode); // Here I added a err message in front of the status code.
});
}
我也將測試套件更改為
'we get 200': function (err, statusCode) {
然后這個測試成功了! 我只是想知道這種奇怪的情況怎么發生。 我已經閱讀了誓言的文檔,但是我什么都沒發現他們說我必須將2個參數而不是1放到cb中。
給我一些線索! 先感謝您!
Vows文檔沒有提及它,但是它假定了錯誤優先回調模式,該模式已被Node.js社區廣泛采用。 在這種模式下,回調的第一個參數始終是錯誤。 如果它為null或未定義,則說明異步操作成功。 即使該函數永遠不會產生錯誤參數,我也建議對您自己的所有代碼也使用此模式。
如果您自己使用此模式,則可以更輕松地利用其他庫(例如async) ,這對於復雜的應用程序來說可以使事情變得容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.