私はいくつかの統合テストを書いてHttpServer
いDirectory().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()
、サブスクリプションをキャンセルします)。しかし、まだ何かがぶら下がっています...