为什么这不起作用?
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()。
这是测试框架的问题吗?不应忽视这类问题。
答案 0 :(得分:4)
任何异步调用都应该包含expectAsyncX(),告诉测试等待其调用。 在第一种情况下,您的第一个异步调用未被包装,因此它不会“等待”足以在catchError中执行expectAsync1。