6

私はいくつかの統合テストを書いてHttpServerDirectory().watch()ます.

次のテスト構成を使用しています。

class LaserServerTestConfiguration extends SimpleConfiguration {
  LaserServer _server;
  LaserServerTestConfiguration(this._server);
  void onDone(bool success) {
    super.onDone(success);
    _server.stop();
  }
}

そして、私のテストは次のようになります。

main() {
  var conf = new LaserConfiguration.fromPath('test/test_config.yaml');
  var server = new LaserServer(conf);
  unittestConfiguration = new LaserServerTestConfiguration(server);

  server.start().then((_) {

    test('test file changed event', () {
      var response = new Completer<Map>();
      response.future.then(expectAsync((e) =>
        expect(e, containsValue('test/sample/sample_test.html'))
      ));
      WebSocket.connect("ws://localhost:2014").then((ws) {
        ws.listen((msg) {
          response.complete(JSON.decode(msg));
          ws.close();
        });
        new File('test/sample/sample.dart').writeAsString("");
      });
    });

  });
}

私が抱えている問題は、テストが実行された (そして合格した) 後、Dart VM が終了しないことです。おそらく、イベント キューに保留中のものが残っているためです。

イベント キューをデバッグするにはどうすればよいですか? テスト実行の最後に Dart VM が終了するのを妨げている原因を確認したいと思います。

カスタム TestConfiguration で、onDone() をオーバーロードしていることがわかります。これが呼び出され、サーバー ( .close(force: true)HttpServer で) を停止し、すべての 'ers をループしてDirectory().watch()、サブスクリプションをキャンセルします)。しかし、まだ何かがぶら下がっています...

4

1 に答える 1