2016-10-04 139 views
0

我正在實現該透過WebSocket它們之間的交互服務器和客戶端部件庫:與VM服務器和瀏覽器dartium達特集成測試

服務器使用示例(CLI跑):

Server srv = await new Server("localhost:1234"); 
srv.onNewClientConnected.listen(print("client connected")); 

客戶端使用的例子(跑瀏覽器):

Client cli = await new Cliente("localhost:1234"); 
cli.sendCommand(...); 

(只是通過創建情況下,客戶應連接和服務器注意到了有關該連接。)

我想知道什麼是測試他們互動的最佳方式?我能用這種方法檢查兩個對象內部嗎?

我想是這樣的:

test(".echo should receive same input from server",(){ 
    cli.echo("message"); 
    expect(srv.lastMessageReceived, equals("echo: message")); 
    expect(cli.lastResponseReceived, equals("echo: message")); 
    expect(srv.amountMessagesReceived, equals(1)); 
}); 

回答

1

如果我理解正確的,我猜你想封裝https://www.dartlang.org/dart-vm/dart-by-example#websockets成幫手,這樣連接時,你只有實例。然而,兩種操作(服務器端綁定/監聽/升級,客戶端連接)都是異步的,所以你不會通過創建實例來達到你想要的狀態(或者你需要一個額外的異步方法來通知)。我會建議創建異步助手。

假設你在你的服務器只接受一個客戶端

Server server = await Server.accept("localhost:1234"); 

客戶端:

Client client = await Client.connect("localhost:1234"); 

通過這樣做,你會連

我喜歡當只有服務器和客戶機實例https://pub.dartlang.org/packages/web_socket_channel包提供了一個很好的抽象,並允許我測試我的web套接字客戶端邏輯,它將在一個簡單的io測試中在瀏覽器中運行。

至於測試建議,我個人啓動我的網絡套接字服務器setUpAll並創建我的客戶端在setUp和用戶一個類似的邏輯,你建議(不要忘記等待,但你需要等待回聲響應)。再次web_socket_channel包有一些很好的測試的例子,你可以看看(https://github.com/dart-lang/web_socket_channel/tree/master/test

+0

謝謝您的回答!但是我沒有用的問題,但隨着運行集成這種測試在飛鏢最佳實踐:我應該使用一個特定的圖書館......等等 會擴大的問題,我認爲這是個大氣壓不太清楚.. –

+1

我增加了一些建議。我認爲'web_socket_channel'是一個很好的選擇。我將它與shelf,rpc和mongodb一起使用,以獲得完整的服務器端解決方案。我不確定這是否完全回答你的問題,但通過進行單元測試,你當然是在一個良好的軌道上 – alextk