如何测试异步生成器引发的异常?

阿努拉格·班达里(Anurag Bhandari)

我的Flutter应用程序中有一个存储库类,使用以下方法返回Stream:

Stream<List<Product>> getProducts() async* {
  var currentUser = await this._auth.currentUser();

  if (currentUser == null) {
    throw AuthException('not_logged_in',
        'No current user found probably because user is not logged in.');
  }

  yield* ...
}

按照SO上的这个答案,从异步生成器函数引发异常的上述方法看起来不错。

如何编写测试(带有测试包),以便测试此方法引发的异常?

像这样的东西不起作用

test('should throw exception when user is not logged in', () {
  final _authSignedOut = MockFirebaseAuth(signedIn: false);
  final _repoWihoutUser = FirebaseProductRepository(
    storeInstance: _store,
    authInstance: _authSignedOut,
  );

  var products = _repoWihoutUser.getProducts();

  expect(products, emitsError(AuthException));
});

也没有:

expect(callback, emitsError(throwsA(predicate((e) => e is AuthException))));

甚至没有:

var callback = () {
  _repoWihoutUser.getProducts();
};

expect(callback, emitsError(throwsA(predicate((e) => e is AuthException))));
詹姆斯德林

你近了 您的第一次尝试:

expect(products, emitsError(AuthException));

不起作用,因为emitsError将aMatcher作为参数,因此您不能直接将其传递给类型。相反,您需要使用isA<T>() Matcher

expect(products, emitsError(isA<AuthException>()));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用产量生成器测试 chai 异常

来自分类Dev

如何正确锁定异步生成器?

来自分类Dev

如何在异步生成器函数中引发错误

来自分类Dev

python contextmanager如何将异常引发回带装饰的生成器?

来自分类Dev

在不关闭生成器的情况下引发异常

来自分类Dev

python生成器列出了重新引发的异常

来自分类Dev

重新绑定时,生成器引发异常

来自分类Dev

生成器/异步 lambda

来自分类Dev

生成器的异常处理

来自分类Dev

生成器的异常处理

来自分类Dev

如何将此函数转换为异步生成器

来自分类Dev

如何与异步 javascript 生成器进行 2 路通信?

来自分类Dev

Python:从中间函数返回的异步生成器引发TypeError

来自分类Dev

如何在GWT中测试生成器?

来自分类Dev

如何测试使用CO调用的生成器功能

来自分类Dev

JavaScript生成器样式的异步

来自分类Dev

异步生成器:产生被拒绝的承诺

来自分类Dev

JavaScript生成器样式的异步

来自分类Dev

强制迭代生成器以查看异常

来自分类Dev

生成器中嵌套的异常行为

来自分类Dev

生成器中嵌套的异常行为

来自分类Dev

生成器中嵌套的异常行为

来自分类Dev

生成器中嵌套的异常行为

来自分类Dev

强制迭代生成器以查看异常

来自分类Dev

如何嵌套生成器

来自分类Dev

Laravel查询生成器输出测试

来自分类Dev

使用QuickCheck测试随机生成器

来自分类Dev

播种随机生成器以进行测试

来自分类Dev

Android Junit测试生成器