在我迁移到最新的候选版本之前,我对一个运行良好的指令进行了一些单元测试。即使在 RC 下,测试也顺利通过,但如果主模块包含“ngAnimate”,即使应用程序没有定义或使用动画,也会失败。不知何故,例行同步测试变得时髦。
该应用程序在生产中运行时运行良好。
以下Plunkr说明了这个问题:
该指令
app.directive('directive', function(){
return {
template: '<dir ng-class="blues()">'+
'This text is {{blues()}}, but the test failed.'+
'</dir>',
restrict: 'E',
replace: true,
link: function(scope, element, attrs){
scope.blues = function(){return 'blue';};
}
};
});
考试
...
beforeEach(inject(function($rootScope, $compile) {
scope = $rootScope.$new();
element = $compile('<directive></directive>')(scope);
$rootScope.$digest();
}));
...
it('should have the text be blue', function() {
expect(element.hasClass('blue')).toBeTruthy();
});
...
(只需删除 Plunker 主模块的 app.js 定义中的 ngAnimate 即可查看测试通过)。
这个问题似乎与最近对 ng-class 和动画的更改有关。没有多少研究似乎奏效。这是怎么回事?
顺便说一句:我注意到 angular.mock.animate 装饰器似乎不是仅仅通过在我的普通课程中添加 angular-mock.js 来安装的。($animate 没有对 flushNext 进行编码。)我是否需要做一些特别的事情,或者以任何特定的顺序加载以使配置正常工作?