簡體   English   中英

在node.js中使用誓言時出現奇怪的錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM