我们如何使用angulardart中的测试包对异步函数进行单元测试?

时间:2018-06-06 11:39:38

标签: unit-testing asynchronous testing dart angular-dart

我尝试使用angulardart代码创建异步函数,该代码将调用内部服务,并且从服务将返回来自测试URL的响应。我将如何模拟特定函数getUserDetails()。

login_component.html

<div class="container">
   <button type="button" (click)="getUserDetails()">Click me to see 
     details
   </button>
</div>
<div *ngFor="let user of userDetails">{{user.id}}</div>

login_component.dart:

Future<Null> getUserDetails() async {
 try {
   userDetails = await _loginService.userDetails();
   print(userDetails);
 } catch (e) {
   errMsg = e.toString();
 }
}

login_service.dart:

Future<dynamic> userDetails() async {
    var _url = 'https://jsonplaceholder.typicode.com/users';
    try {
      var res = await _http.get(_url);
      var response = _extractData(res).map((value) => new 
      List.fromJson(value)).toList();
      return response;
       } catch (e) {
         print(e);
        }
}
dynamic _extractData(Response resp) => JSON.decode(resp.body);

list.dart

class List {
  int id;
  String name;
  List(this.id, this.name);
  factory List.fromJson(Map<dynamic, dynamic> list) =>
  new List(list['id'], list['name']);
  Map toJson() => {'id': id, 'name': name};
}

请帮我找出解决方案。另外,我如何检查angulardart中的测试代码覆盖率?

1 个答案:

答案 0 :(得分:1)

您的问题有许多方面和方面,并非所有问题都可以简明扼要地解决。但这里有一些指导原则:

  • &#34;我们如何使用测试包测试异步功能?&#34;

    test package统一支持同时写两个 和异步测试。有关详细信息,请参阅包自述文件部分 在Asynchronous Tests

  • &#34;我们如何在AngularDart中进行单元测试?&#34;

    • 要测试AngularDart 服务,您可以使用 仅使用test package

    • 您可以使用以下方法编写AngularDart 组件的测试 angular_test包的帮助。


    请参阅AngularDart Testing Guide部分 Component Testing了解详情。

  • &#34;我如何模拟特定函数getUserDetails()&#34;

    我假设您要测试您的组件,在这种情况下,您不想模拟组件的getUserDetails()方法。相反,您嘲笑它使用的服务LoginSerice)。

    Mockito包使得创建模拟变得非常容易。 测试指南部分 Services: local, external, mock, real 解释了如何编写和使用模拟服务。

  • &#34;如何查看测试代码覆盖率??&#34;

    我知道的其他一些Dart项目使用coveralls.io, 但是我还没有亲自使用它。

我上面给出的文档链接适用于 Angular 5 。 Angular 4测试指南是here