Javascript 如何在角度单元测试中关闭jquery动画计时器?
我正在测试一个指令,该指令在元素在100毫秒内消失后将其从页面中删除。如果我使用$timeout,我可以通过测试,但我不想让测试运行程序在等待动画完成时慢下来。我发现了这一点,它描述了如何在jasmine测试中“关闭”jQueryFX,但如何将jquery变量注入到测试中 以下是指令函数代码段:Javascript 如何在角度单元测试中关闭jquery动画计时器?,javascript,jquery,angularjs,unit-testing,jasmine,Javascript,Jquery,Angularjs,Unit Testing,Jasmine,我正在测试一个指令,该指令在元素在100毫秒内消失后将其从页面中删除。如果我使用$timeout,我可以通过测试,但我不想让测试运行程序在等待动画完成时慢下来。我发现了这一点,它描述了如何在jasmine测试中“关闭”jQueryFX,但如何将jquery变量注入到测试中 以下是指令函数代码段: if(curtain.length > 0) { curtain.fadeOut(100, function (){ curtain.remove(); }); } 下面是我的$
if(curtain.length > 0) {
curtain.fadeOut(100, function (){
curtain.remove();
});
}
下面是我的$timeout功能测试:
it('should remove the overlay (curtain) from the page', function (){
var config = {
start: false,
steps: []
};
//Initialize
var cmf = factory.getInstance(config);
//add curtain
cmf.curtain();
var curtain1 = angular.element('body').find('#ng-curtain');
expect(curtain1.length).toBe(1);
//remove curtain
cmf.curtain(true);
var curtain2 = angular.element('body').find('#ng-curtain');
$timeout(function (){
expect(curtain2.length).toBe(0);
}, 110);
});
我想你不必注射。如果您将jquery脚本与jasmine一起包含,那么它将在全局范围内。在您的原始代码中是否注入了jquery?当使用angular.element(选择器)时,jquery的函数是可用的,但如果我尝试记录jquery的值,它是未定义的。您是否将jquery脚本与jasmine脚本一起包括进来?很抱歉定义了jquery,但由于jshint的原因,在使用jquery变量时我无法运行规范。但是我找到了解决方案:使用jshint的/*global jQuery*/标志来知道jQuery在全局范围内,然后jQuery.fx.off=true;一切正常。感谢您对本PSL的帮助