1

なぜこれが機能しないのですか?

var validUri = 'postgresql://user:pwd@localhost:5432/testdb';

test('Query on closed connection.', () {
  connect(validUri).then((conn) {
    conn.close();
    conn.query("select 'blah'").toList()
      .then((_) => throw new Exception('Should not be reached.'))
      .catchError(expectAsync1((err) {}));
  });
});

test('Execute on closed connection.', () {
  connect(validUri).then((conn) {
    conn.close();
    conn.execute("select 'blah'")
      .then((_) => throw new Exception('Should not be reached.'))
      .catchError(expectAsync1((err) {});
  });
});

しかし、最後のcatchErrorのコールバック割り当てを変更すると:

(...)

test('Execute on closed connection.', () {
  var cb = expectAsync1((e) {});
  connect(validUri).then((conn) {
    conn.close();
    conn.execute("select 'blah'")
      .then((_) => throw new Exception('Should not be reached.'))
      .catchError(cb);
  });
});

できます!

私はこれについての素晴らしい説明を読みたいと思います、そしておそらくダート非同期テストのレッスンを1つか2つ持っています:-)

編集:問題は、最初の例が機能したことです-合格したと報告されました!あるべきではありません。後のテストでexpectAsyncX()がコールバックされたに違いないと思います。

これはテストフレームワークの問題ですか?この種の問題は黙って無視されるべきではありません。

4

1 に答える 1

4

非同期呼び出しは、その呼び出しを待機するようにテストに指示するexpectAsyncX()でラップする必要があります。最初のケースでは、最初の非同期呼び出しはラップされていないため、catchErrorでexpectAsync1を実行するのに十分な「待機」はありません。

于 2013-03-27T11:27:55.270 に答える