我有一个简单的指令,只是简单地来自控制器的绑定。
我的单元测试代码未运行。有什么想法吗?
HTML:
<div ng-controller="MainCtrl as main">
<div uppercase>{{main.message}}</div>
</div>
控制器:
app.controller('MainCtrl', function(){
this.message = 'hello world'
})
指令:
app.directive('uppercase', function($timeout) {
return {
restrict: 'A',
transclude: true,
template: '<span ng-transclude></span>',
link: function(scope, el, attr) {
$timeout(function(){
el.text(el.text().toUpperCase());
});
}
}
});
我的单元测试目前是:
describe("App", function() {
var $compile
, $rootScope
, $controller
, MainCtrl
, element;
beforeEach(module('app'))
beforeEach(inject(function(_$compile_, _$rootScope_, _$controller_){
$compile = _$compile_;
$rootScope = _$rootScope_;
$controller = _$controller_;
MainCtrl = $controller('MainCtrl');
}))
describe("MainCtrl", function() {
it("should have a message property", function() {
expect(MainCtrl.message).toBe('hello world');
});
});
describe("Uppercase directive", function() {
it("should return uppercase text", function() {
element = '<p superman>{{MainCtrl.message}}</p>';
element = $compile(element)($rootScope);
$rootScope.$digest();
expect(element.text()).toBe('HELLO WORLD');
});
});
});
我的测试中不能使用$ timeout,那么我应该如何测试呢?
答案 0 :(得分:0)
我还没有对它进行测试,但我相信在expect(element.text()).toBe('HELLO WORLD');
之前,您必须清除超时。
我的意思是,你有一个名为$ timeout的额外变量(在beforeEach中)然后,在上面提到的预期之前,你要调用$ timeout.flush()。