2012-02-13 79 views
3

我正在寫一個簡單的TCP服務器,使用Node.JS來學習更多關於某些特定的事情,然後纔開始考慮我想要的一個更大的項目。我希望瞭解更多關於測試驅動開發,用戶認證和加密的內容。對於踢球,我正在實施一個帶有用戶帳戶,統計數據和隨機遊戲配對的多人玩牌遊戲。使用Node.js TCP服務器進行測試驅動開發?

無論如何。

我的問題是,我已經爲應用程序的某些部分設置了測試,但是現在是編寫TCP部分的時候了。我將Expresso與Should.js結合使用,並且效果很好。我的問題是我如何測試TCP服務器?我是否會重複提出要求,並確保我獲得了我想要的東西?或者我應該以某種方式編寫服務器,而不必首先提出請求來進行測試? (通過抽象)

我很好奇。在此先感謝您的見解!

+1

你應該考慮使用摩卡,它是TJ Expresso的進化(來自Expresso的GitHub:「請務必查看Expresso的後繼摩卡。」)。至於這個問題本身,我認爲應該測試對TCP服務器的調用,但是與實現(它本身應該是測試的目標,與TCP調用分開)分開進行測試。 – mna 2012-02-13 03:05:41

+0

我完全同意使用摩卡。我愛摩卡。 – 2012-02-13 03:07:41

回答

3

Node.js使這非常簡單。您可以在您的測試方法中正確創建您的服務器,並創建一個客戶端以使用該測試方法進行連接。它會變得非常乾淨。

您的客戶端/服務器通信將具有某種消息/通信合同。所以,對於TDD這件事,你會從每個消息/數據集等開始,併爲此寫入測試。我喜歡讓Server封裝一個TCP服務器,以便它可以執行自定義邏輯。

所以,你可能有這樣的事情:

的Test1:

describe('MyServer', function(){ 
    it('should respond with an acknowledgment of receiving my move command', function(done){ 
     var server = new MyServer(); 
     server.listen(9000); 

     var json = '{"player": "1", "tile": "3"}' //player 1 puts an 'X' in tile 3 
     client = net.connect(9000, function(){ 
     client.write(json); 
     }); 

     client.on('data', function(data){ 

     //** your tests here to validate YOUR CUSTOM server response ** 
     //example assuming your server sends JSON 
     serverResponse = JSON.parse(data.toString()); 
     assert(serverResponse.tilesRemainingCount, 5); //completely custom 

     server.close(); 
     done(); 
     }); 
    }); 
} 

是否幫助呢?這就是我一直在做的事情,而且效果很好。如果有問題不清楚,請告訴我,我會盡力澄清。

另外,我是一個CoffeeScript開發人員,所以我可能在JS語法中犯了一個錯誤。

+0

看起來很棒! - 想知道,你如何構建你的Node TCP服務器代碼?我所做的大部分工作都是在服務器文件中設置一個「服務器」變量。我如何使這些文件可以在該文件之外創建和啓動? (使用我認爲的出口,但是,哪種方式最好?) – 2012-02-13 05:47:15