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);
  });
});

有用!

我很想阅读一个很好的解释,也许在 Dart 异步测试方面有一两课:-)

编辑:问题是第一个例子确实有效 - 它报告通过了!它不应该有。我假设 expectAsyncX() 必须在以后的测试中被回调。

这是测试框架的问题吗?这种类型的问题不应该被忽视。

4

1 回答 1

4

任何异步调用都应该用 expectAsyncX() 包装,告诉测试等待它的调用。在您的第一种情况下,您的第一个异步调用没有被包装,因此它没有“等待”到足以执行 catchError 中的 expectAsync1。

于 2013-03-27T11:27:55.270 回答