2

ソケットをモックして WebSockets を使用するクラスをテストしようとしています

私のクラスは次のようになります

class WebLoggerHandler{

   WebLoggerHandler(){

     var webSocket = new WebSocket('hostUrl');
     webSocket.onOpen.first.then((_) {
       webSocket.sendString('hello');
     });
   }
}

次のように WebSocket クラスをモックしています

class MockWebSocket extends Mock implements WebSocket{        
  Stream<Event> onOpen;
}

私のテストの本体は次のようになります

  var webSocket = new MockWebSocket();

  //fire the onOpen event 
  webSocket.onOpen = new Stream.fromFuture( new Future.value( new Event( "onOpen")));

  WebLoggerHandler underTest = new WebLoggerHandler();

  //test that the hello message was sent when the socket was opened
  webSocket.getLogs( callsTo("sendString", 'hello')).verify( happenedExactly(1))  

ただし、webSocket ログのチェックが発生した後に onClose イベントが発生するため、機能しません。

Future が発生するまでコードを待機させるにはどうすればよいですか?

ありがとう

4

1 に答える 1

1

API ドキュメントを読み、解決しました。テストは未来を返す必要があります

   test("it should send 'hello' to the server", () {

      return new Future.value().then((_) {

        webSocket.getLogs(callsTo("sendString", {'hello'})).verify(happenedExactly(1));

      });

   });
于 2014-05-24T12:05:29.337 に答える