3

我开始深入研究 qUnit,但遇到了一个问题,我不确定如何正确编写测试。

该函数基本上会在按下按钮时提醒 jQuery UI 对话框。这是我的 qUnit 测试:

test( "If Text is Type, and Control is Textbox, Check Alert if Two Values are Present",  function() {

    //Add New Row
    $('.button').click();


    equal($('#jquery_ui_id').is(':visible'), true, "Prompt is Shown" );

});

问题是测试在 qUnit 中通过,但仅在重新加载时通过。所以当我第一次运行测试时它总是失败,然后在我重新加载它时成功。

有谁知道这里发生了什么,或者以前遇到过这种情况?

4

2 回答 2

4

通常,当您重新加载页面时 qUnit 测试在失败和成功之间切换时,这意味着您在测试后没有正确清理并且它们相互冲突。

如果您将元素添加到 DOM 并在模块或测试中操作而不使用特殊#qunit-fixture元素,您应该在该模块的末尾删除它们,以便下一个可以重新开始。

有关更多信息,请参阅保持 qUnit 测试原子性的部分。

QUnit 将在每次测试后重置 #qunit-fixture 元素内的元素,删除任何可能存在的事件。只要您仅在此夹具中使用元素,您就不必在测试后手动清理以保持它们的原子性。

于 2013-02-21T13:44:40.697 回答
-1

有同样的问题,我肯定会在元素 #qunit-fixture 下渲染我的所有 dom。在调查时,我发现JQuery-UI 将对话框的元素直接添加到<body>.

所以解决这个问题的一种方法是在身体之前渲染#qunit-fixture。就我而言,我在正文中有javascript脚本,这不在#qunit-fixture下。所以我需要在此之前从正文中删除脚本。

<html>
   <head></head>
   <div id="qunit-fixture"><!--Wrap whole body into fixture-->
       <body>
       </body>
   </div>
</html>


另一种解决方法是手动删除拆解中添加的内容。

module("SomeModule",
{
    teardown: function ()
    {
        $('.ui-front').remove();//Need to be reset manually, because jquery dialog add these outside of fixture...
    }
});

为了清理添加的元素,我们使用它们都具有“ui-front”类的事实。

于 2015-05-15T01:35:17.477 回答