gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 21:21:29 25 4
gpt4 key购买 nike

我尝试使用 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 中的测试代码覆盖率?

最佳答案

您的问题涉及多个方面和维度,无法简明扼要地解决所有问题。但这里有一些准则:

  • “我们如何使用测试包进行单元测试异步函数...?”

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

  • “我们如何在 AngularDart 中进行单元测试?”

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

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


    查看 AngularDart Testing Guide关于 Component Testing了解详情。

  • “我将如何模拟特定函数 getUserDetails()”

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

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

  • “我如何检查测试代码覆盖率......?”

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

我上面给出的文档链接是针对 Angular 5 的。 Angular 4 测试指南是 here .

关于unit-testing - 我们如何使用angulardart中的测试包对异步函数进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50719520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com