Page 283 - AngularJS权威教程
P. 283
19.14 测试一个应用 263
例如,可以测试一个服务填充了视图中的一个事件列表。在一个用于显示事件列表的/events 19
页面,我们可以断言确实列出了符合预期的事件数:
beforeEach(function() { 20
browser().navigateTo('/#/events');
});
it('should show 10 events', function() { 21
expect(
repeater('.event_listing li').count()
).toBe(10); 22
});
19.14.5 测试过滤器 23
过滤器很容易测试:它们是隔离的功能。过滤器的功能就是限制或者改变输出,所以我们会
在过滤器函数的输出上设置断言。 24
1. 单元测试过滤器
25
对过滤器进行单元测试很简单。首先,要访问过滤器,只需简单地把$filter服务注入到我
们的测试中。这样我们就得到了一个在此过程中查找过滤器的途径:
26
describe('Unit: Filter tests', function() {
var filter;
27
// 在测试中模拟我们的引用
beforeEach(module('myApp'));
beforeEach(inject(function($filter) {
filter = $filter; 28
}));
});
29
有了对控制器的访问,在过滤器的输出上设置预期就是很容易的事了。
it('should give us two decimal points', 30
function() {
expect(filter('number')(123, 2)).toEqual('123.00');
});
31
2. 端到端测试过滤器
我们也可以用端到端测试在视图中测试过滤器的输出。端到端测试跟用于测试代码的单元测 32
试略有不同,因为我们关注最终用户看到的东西,更甚于关注过滤器函数的具体输出。
要建立一个过滤器测试,需要让浏览器加载用于测试过滤器的页面,然后再跟过滤器自身打 33
交道:
例如,给定如下用例,有一个对ng-repeat的实时搜索: 34
<input ng-model="search.$" type="text" placeholder="Search filter" />
<table id="emailTable">
<tbody> 35
<tr ng-repeat="email in emails | filter:search.$">
<td>{{ $index + 1 }}</td>
<td>{{ email.from }}</td> 36
<td>{{ email.subject | capitalize }}</td>