如何在 Jasmine 单元测试中使用 Sinon 对 jQuery 动画进行假时间?

     2023-05-08     284

关键词:

【中文标题】如何在 Jasmine 单元测试中使用 Sinon 对 jQuery 动画进行假时间?【英文标题】:How do I fake-time a jQuery animation using Sinon in a Jasmine unit test? 【发布时间】:2011-11-11 13:10:27 【问题描述】:

我有一个 1 秒的 jQuery .animate 操作,在页面加载后 5 秒启动。我在 Jasmine 单元测试代码中设置了一个 Sinon 计时器,并在 7 秒的滴答声后进行测试,以查看动画后的属性是否应有。

它不能正常工作,所以我在 Jasmine HTML 测试页面上放置了动画本身的一个实例,以便更好地了解发生了什么。

在 Firefox 和 Chrome 中,页面加载,动画函数被调用,单元测试立即失败,然后(也立即)动画可见。

在 IE、Opera 和 Safari 中,页面加载,动画函数被调用,单元测试立即失败,动画从不可见。

我希望的是以下(在所有浏览器中):

页面加载完毕,调用动画函数,动画瞬间完成,单元测试立即成功。

查看Sinon's documentation,它的假计时器涵盖以下过程: setTimeoutclearTimeoutsetIntervalclearIntervalDate

我不知道jQuery的动画是如何工作的,但我想它是使用CSS来过渡的,而CSS过渡在Sinon的useFakeTimers中没有涵盖,所以我想这就是问题所在。但是,如果我对问题的看法是正确的,我仍然需要解决方案。

也许我应该试试诗浓以外的东西? Jasmine 的waits() 在这个测试中完美运行,但对于像我这样没有耐心的人来说非常不切实际。

还有其他建议吗?请记住,我是 JS 单元测试的新手,所以模糊的答案会让我感到困惑,而不是帮助我。 ;o)

【问题讨论】:

已经几天了,没有人回答。为了解决这个问题,我现在正在做的是使用 Jasmine 的 waits() 功能。它运行良好,尽管测试不是即时的,而是实时完成的。嘘。请发布您可能对我有的任何其他想法。谢谢。 嘿!你有没有找到解决这个问题的新方法? $.fx.off 答案完美,但它仍然不是应该的方式...... 我没有。我一直在使用等待()。我实际上已经忘记了这个问题。但是,鉴于 Derek 的解决方案比 Alex 的解决方案更简单,并且它有几票赞成(因此它可能对其他人有用),我会尝试一下,如果它对我有用,则将其标记为答案。 【参考方案1】:

你可以使用jQuery off来关闭jQuery效果:

jQuery.fx.off = true

这不会解决您最初等待事件触发的 7 秒的问题,但这确实意味着您可以测试 DOM 是否已按预期更改。

【讨论】:

【参考方案2】:

我也遇到了同样的问题。我相信这是因为 jQuery 的动画利用了requestAnimationFrame()(如果它可用)而不是依赖于setTimeout()

我已通过将 window 对象上的所有浏览器特定的 requestAnimationFrame 函数设置为 null 来解决此问题:

window.webkitRequestAnimationFrame = null;
window.mozRequestAnimationFrame = null;
window.oRequestAnimationFrame = null;

确保在加载 jQuery 之前执行此代码。

【讨论】:

使用 jasmine + jquery + sinon.js 时,这对我不起作用。我什至确保它在我的任何规范文件甚至 jquery 之前作为 src 依赖项加载。也许我做错了什么?奇怪的是,当我单独运行测试(没有任何其他人)时,它通过了。【参考方案3】:

我认为使用 SinonJs 是可能的,如下所示:https://sinonjs.org/releases/latest/fake-timers/

test("should animate element over 500ms", function () 
   var el = jQuery("<div></div>");
   el.appendTo(document.body);

   el.animate( height: "200px", width: "200px" );
   this.clock.tick(510);

   equals("200px", el.css("height"));
   equals("200px", el.css("width"));
);

【讨论】:

使用 Sinon 进行单元测试:如何在回调中测试变量?

】使用Sinon进行单元测试:如何在回调中测试变量?【英文标题】:UnitTestingw/Sinon:HowdoItestavariableinsideofaCallback?【发布时间】:2019-05-0510:16:17【问题描述】:我正在与Sinon进行单元测试,以至少尝试让某些东西通过,但我不走运。... 查看详情

如何使用 sinon 在单元测试中存根 Mongoose 模型方法

】如何使用sinon在单元测试中存根Mongoose模型方法【英文标题】:HowtostubMongoosemodelmethodsinunittestswithsinon【发布时间】:2020-06-2614:33:05【问题描述】:我有一个方法getTask(),看起来像这样:constTask=require(\'./model\');constUser=require(\'../u... 查看详情

在 Angular 中使用 Jasmine 使用 *ngIf 指令时,如何对元素是不是可见进行单元测试

】在Angular中使用Jasmine使用*ngIf指令时,如何对元素是不是可见进行单元测试【英文标题】:HowdoIunittestifanelementisvisiblewhenthe*ngIfdirectiveisusedusingJasmineinAngular在Angular中使用Jasmine使用*ngIf指令时,如何对元素是否可见进行单元测试【... 查看详情

在 Jasmine 单元测试中模拟 AngularJS 模块依赖项

】在Jasmine单元测试中模拟AngularJS模块依赖项【英文标题】:MockingAngularJSmoduledependenciesinJasmineunittests【发布时间】:2013-07-0710:38:36【问题描述】:我试图在一个模块中对控制器代码进行单元测试,该模块将其他模块作为依赖项,... 查看详情

如何模拟在 AngularJS Jasmine 单元测试中返回承诺的服务?

】如何模拟在AngularJSJasmine单元测试中返回承诺的服务?【英文标题】:HowdoImockaservicethatreturnspromiseinAngularJSJasmineunittest?【发布时间】:2014-07-0511:36:08【问题描述】:我有myService使用myOtherService,它进行远程调用,返回承诺:angula... 查看详情

如何在不使用 Angular 的 spyOn 的情况下检查服务中的方法是不是在 Jasmine 单元测试中被调用?

...在不使用Angular的spyOn的情况下检查服务中的方法是不是在Jasmine单元测试中被调用?【英文标题】:HowtocheckifamethodfromaserviceiscalledornotinJasmineunittestingwithoutusingspyOninAngular?如何在不使用Angular的spyOn的情况下检查服务中的方法是否在J... 查看详情

如何对 DOM 操作进行单元测试(使用 jasmine)

】如何对DOM操作进行单元测试(使用jasmine)【英文标题】:howtounittestDOMmanipulation(withjasmine)【发布时间】:2013-04-1608:14:13【问题描述】:我需要用jasmine对一些DOM操作函数进行单元测试(目前我在浏览器和Karma中运行我的测试)我... 查看详情

如何在 jasmine 中编写单元测试用例?

】如何在jasmine中编写单元测试用例?【英文标题】:Howtowriteunittestcaseinjasmine?【发布时间】:2021-07-1110:27:36【问题描述】:Flag(a)letelement=this.selected.filter(item=>item.a===a)returnelement.length>1?true:false;不确定如何为上述函数编写单元... 查看详情

Angular 7:如何在 Jasmine 单元测试中解决 Hammer.js 依赖项

】Angular7:如何在Jasmine单元测试中解决Hammer.js依赖项【英文标题】:Angular7:HowtoresolveHammer.jsdependencyinJasmineunittest【发布时间】:2020-11-0306:31:24【问题描述】:在为使用MaterialSlider并依赖HammerJS的组件编写单元测试时,我看到此错... 查看详情

如何在 Angular 7 中使用 Karma/Jasmine 为 App_Initializer 编写单元测试用例

】如何在Angular7中使用Karma/Jasmine为App_Initializer编写单元测试用例【英文标题】:howtowriteunittestcasesforApp_InitializerusingKarma/Jasmineinangular7【发布时间】:2019-06-3002:41:22【问题描述】:我已经在我的app.module.ts文件中导入了APP_INITIALIZER... 查看详情

如何使用 Jasmine 为私有方法编写 Angular / TypeScript 单元测试

】如何使用Jasmine为私有方法编写Angular/TypeScript单元测试【英文标题】:HowtowriteunittestingforAngular/TypeScriptforprivatemethodswithJasmine【发布时间】:2016-06-2911:06:28【问题描述】:如何在Angular2中测试私有函数?classFooBarprivate_status:number;co... 查看详情

如何在 Jasmine 测试中测试 $scope?

】如何在Jasmine测试中测试$scope?【英文标题】:Howtotest$scopeinJasminetest?【发布时间】:2016-09-1414:47:20【问题描述】:我尝试使用Jasmine为Angularjs编写单元测试。这是我的控制器:functionHomeController($scope,fav,news,materials)console.log(\'homec... 查看详情

如何在 Jasmine 中使用 React 测试工具

】如何在Jasmine中使用React测试工具【英文标题】:HowtouseReactTestUtilitieswithJasmine【发布时间】:2014-03-3012:53:09【问题描述】:我用React的测试工具编写了单元测试代码。但是遇到了问题我的环境是:导轨4茉莉花2.0.0主干1.1.2describe("... 查看详情

如何使用 mocha sinon 存根对请求库进行单元测试?

】如何使用mochasinon存根对请求库进行单元测试?【英文标题】:HowtounittestRequestlibrarywithmochasinonstub?【发布时间】:2021-11-2618:37:36【问题描述】:如何使用Mocha、sinon和chai测试NPM请求库?我得到一个Error:getaddrinfoENOTFOUND。URL应该无... 查看详情

如何在 Jasmine 中对“throw new Error()”子句进行单元测试

】如何在Jasmine中对“thrownewError()”子句进行单元测试【英文标题】:Howtounittest"thrownewError()"clauseinJasmine【发布时间】:2021-12-0903:32:09【问题描述】:我有一个使用服务的组件。我通过捕获错误并使用自定义消息抛出新错... 查看详情

使用 Jasmine 单独测试 Marionette 模块

】使用Jasmine单独测试Marionette模块【英文标题】:TestingMarionetteModulesinisolationwithJasmine【发布时间】:2013-03-2506:35:47【问题描述】:我有一个Marionette项目,类似于http://www.backbonerails.com/中描述的设置我正在使用Rails、Coffeescript和Jasm... 查看详情

如何更好地构建 Jasmine 单元测试,使它们不会出现在一个巨大的文件中?

】如何更好地构建Jasmine单元测试,使它们不会出现在一个巨大的文件中?【英文标题】:HowtobetterstructureJasmineunittestssuchthattheydon\'tendupinahugefile?【发布时间】:2019-08-1900:28:01【问题描述】:我想确保我的单元测试可读且可维护,... 查看详情

如何最好地测试(单元测试)独立于 WL 应用程序的 WL 适配器? + Jasmine 测试:不能使用“in”运算符在 null 中搜索“SUPPORT_COOKIES”

...最好地测试(单元测试)独立于WL应用程序的WL适配器?+Jasmine测试:不能使用“in”运算符在null中搜索“SUPPORT_COOKIES”【英文标题】:HowtobestTest(UnitTest)WLAdaptersindependentfromWLApp?+JasmineTests:Cannotuse\'in\'operatortosearchfor\'SUPPORT_COOKIES\'in... 查看详情