如何防止在 dart 中使用 expectAsync 的单元测试进展?

Posted

技术标签:

【中文标题】如何防止在 dart 中使用 expectAsync 的单元测试进展?【英文标题】:how to prevent progressing from a unit test that uses expectAsync in dart? 【发布时间】:2014-11-21 23:23:23 【问题描述】:

我有一些单元测试都是异步执行的。但事实证明,即使我在单元测试中多次调用expectAsync(有时这可能涉及对expectAsync的多个嵌套异步调用),单元测试仍然退出并调用tearDown方法,这有效地切断了我的我的异步测试运行的基础设施。我想要发生的是让我的测试运行并等到所有期望(异步与否)都已完成,然后再继续下一个测试。这有可能实现吗?我的单元测试到目前为止一直通过的原因是因为 tearDown 中的清理代码也在执行异步,但理想情况下它应该可以在异步或立即清理的情况下工作。

【问题讨论】:

【参考方案1】:

我们需要查看您的代码才能查明确切的问题。

很可能您调用expectAsync 的次数不够多。在您的代码等待异步回调的任何时候,都必须至少有一个未完成的expectAsync 函数等待调用。

您可以通过创建一个在测试完成时调用的“done”函数将其全部缩减为一个 expectAsync 调用:

test("ladadidadida", () 
  var done = expectAsync(());
  something.then((a)  return somethingElse(); )
           .then((b)  expect(a, b); done(); )
);

【讨论】:

它每次使用这个helper method进入另一个异步“循环”时都会调用expectAsync

以上是关于如何防止在 dart 中使用 expectAsync 的单元测试进展?的主要内容,如果未能解决你的问题,请参考以下文章

镖。主意。如何防止格式合并成单行

防止在抖动中调用相机活动后重置FormFieldText

如何在 Dart 中使用类型别名/类型定义(也是非函数)?

如何在单元测试中访问 Dart 类

Dart异步编程之Future

如何使用 dart 在 MultiPartRequest 中添加列表?