我尝试使用 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/