Page 290 - AngularJS权威教程
P. 290
270 第 19 章 测试
首先,跟往常一样,需要建立测试,这样我们可以访问控制器的作用域:
describe('myApp', function() {
var scope;
beforeEach(angular.mock.module('myApp'));
beforeEach(angular.mock.inject(function($rootScope) {
scope = $rootScope.$new();
});
});
测试建好之后,就可以简单地在作用域上为$emit或者$broadcase事件设置一个spyOn()调
用了。
// ...
});
it('should have emit called', function() {
spyOn(scope, "$emit");
scope.closePanel(); // 示例
// 或者任意可能导致emit被调用的事件
expect(scope.$emit)
.toHaveBeenCalledWith("panel:closed",
panel.id);
});
我们也可以测试事件:设置一个事件触发后调用的$on()监听器。要执行$broadcast方法,
可以简单地在作用域上调用$broadcast,并且对事件将会导致的作用域变化建立一个预期。
// ...
it('should set the panel to closed state',
function() {
scope.$broadcast("panel:closed", 1);
expect(scope.panel.state).toEqual("closed");
});
2. 端到端测试事件
要对事件调用进行端到端测试十分简单:只要简单地测试事件产生的功能是按照我们的预期
来触发的。
19.16 对 Angular 的持续集成
Angular的Karma与持续集成服务协作得很好。持续集成服务,或者简称为CI,给了我们的应
用一个开发的入口,让我们对每次提交的代码能按照预期运行有信心。
持续集成服务器在全世界大小公司和开发人员中广泛使用,学习如何建立它们会是一个不错
②
①
的主意。JenkinsCI 和TravisCI 都能很容易跟Karma集成,我们强烈推荐读者使用它们。
19.17 Protractor
新的端到端测试框架称为Protractor,它将会最终取代当前框架,成为默认的框架。
——————————
① http://jenkins-ci.org
② travis-ci.org