【问题标题】:QUnit fixtures not being restored every timeQUnit 灯具不是每次都恢复
【发布时间】:2015-05-28 01:53:13
【问题描述】:

我是 QUnit 的新手,我正试图弄清楚如何恢复 #qunit-fixtures。据我了解,在运行新测试之前,该元素中的所有内容都会被重置。然而,我看到(对我来说是什么)一些奇怪的东西。在下面的例子中,fixture 中有一个form,它只包含一个input 元素和一个divhas-error。据我了解,在每次测试运行之前,这些都应该恢复到原来的状态。 我已经为$('input') 指定了一个keypress 事件处理程序,只是将div 隐藏在夹具中。

我有两个测试做同样的事情:在输入上触发 keypress 并断言错误文本被隐藏。

我看到的是第一个通过的只有一个。有人可以向我解释这种行为吗?

<html>
  <head>
    <link rel="stylesheet" href="qunit-1.18.0.css">
  </head>

  <body>
    <div id="qunit"></div>
    <div id="qunit-fixture">
      <form> 
        <input name="text" />
        <div class="has-error">Error text</div>
      </form>
    </div>

    <script src="http://code.jquery.com/jquery.min.js"></script>
    <script src="qunit-1.18.0.js"></script>
    <script>
      QUnit.config.reorder = false;
      QUnit.test( "test 1", function ( assert ) {
        $('#qunit-fixture').find('input').trigger('keypress');
        assert.equal($('#qunit-fixture').find('.has-error').is(':visible'), false);
      });

      QUnit.test( "test 2", function ( assert ) {
        $('#qunit-fixture').find('input').trigger('keypress');
        assert.equal($('#qunit-fixture').find('.has-error').is(':visible'), false);
      });

      $(document).ready(function () {
        $('#qunit-fixture').find('input').keypress(function() {
          $('#qunit-fixture').find('.has-error').hide();
        });
      });

    </script>

  </body>
</html>

测试的重点是测试keypress 事件。不管什么 QUnit 代码作用在夹具上,因为它是一个 fixture,如果第一个测试运行 $('#qunit-fixture').find('.has-error').hide();,不应该在运行第二个测试之前撤消吗?

【问题讨论】:

  • 这似乎是一个不太可能的测试场景,对夹具本身进行测试。建议:尝试其他更典型的测试。
  • 我认为这些是对事件处理程序的测试,而不是对固定装置的测试...
  • 默认情况下 QUnit 会改变测试的顺序。要保留订单,请执行此操作 QUnit.config.reorder = false;因此,在您的情况下,总是第二个测试 RUN 失败。要完全回答这个问题,您可能想准确解释为什么要进行此测试,因为它看起来确实很奇怪......对夹具的一部分执行测试,不知道其他 qunit 代码可能对其起作用。
  • 谢谢。这真的很有帮助。所以现在我明白了为什么失败的测试在两者之间交替出现。我已经编辑了问题以澄清我正在测试事件处理程序。也许我只是不明白夹具应该是什么,但我认为它是在每次测试运行之前恢复到原始状态的东西。
  • 夹具仅供 QUnit 使用,我们的测试不会触及它。

标签: javascript jquery qunit


【解决方案1】:

我认为 QUnit 在运行每个测试之前会删除您在夹具中添加的元素。因此,在第二次测试开始时,在文档就绪时添加的“keypress”事件处理程序将被删除。如果您在每个测试开始时添加事件处理程序,或者像这样在准备好的文档上添加事件处理程序,它将起作用:

$("body").on("keypress","input",function( event ) {
        $('.has-error').hide();
});

QUnit 可能不会在第一次测试中删除它,这解释了它为什么第一次工作。

【讨论】:

  • 非常感谢。我才意识到!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
相关资源
最近更新 更多