2016-05-04 59 views
0

server.js興農摩卡節點錯誤處理

var server = http.createServer(function(req, res) { 

    lib.doSomething(x, y, function(err, data) { 
     if (err) throw(err); 

     res.writeHead(200, { 
      'Content-Type': 'text/plain' 
     }); 
     res.end(data); 
    }); 
}); 

serverTest.js

var request = require('request'); 
var server = require('server'); 

    it('throws error when doSomething returns err', function(done){ 

     var expected = 'testError'; 

     doSomething = sinon.stub(lib, 'doSomething', function(x, y, callback){ 
     callback(new Error(expected)); 
     }); 

     try{ 
     request(url, function(err, response, body){ 
      done(); 
     }); 
     } catch(e){ 
     expect(e).to.equal(expected); 
     }; 

    }); 

我走近這個單元測試方法很多,但每當我運行測試,我不斷收到一個Uncaught Error: testError和測試失敗。我環顧四周,發現沒有運氣。這個單元測試通過預期錯誤的最佳方法是什麼?

+0

你在哪裏提到'lib'來自serverTest.js? – idbehold

+0

對不起,應該有一個var lib = require('lib') – James

回答

0

你在這裏得到的是一個通過套接字與自己對話的過程。 server.js建立一個服務,用於偵聽套接字上的請求並作出響應,然後您的測試代碼連接到該套接字併發出請求。現在,問題在於服務器端的調用堆棧和客戶端的調用堆棧是完全不同的堆棧。 如果服務器引發異常,您的客戶端無法捕獲它。換句話說,您的request調用不會拋出異常,因爲lib.doSomething的回調會。你可以平凡地檢查回調拋出一個異常,但那麼測試不是很多。

+0

我確實想過測試回調,但你說得對,它根本不會測試任何東西。我將如何更好地設計服務器和/或測試? – James