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