不是每次都恢复QUnit装置

QUnit fixtures not being restored every time

本文关键字:恢复 QUnit 装置      更新时间:2023-09-26

我是QUnit的新手,我想弄清楚#qunit-fixtures是如何恢复的。据我所知,在运行新测试之前,该元素中的所有内容都将被重置。然而,我看到了(对我来说)一些奇怪的东西。在下面的例子中,夹具中有一个form,它仅由一个input元素和一个has-error类的div组成。因此,据我所知,在运行每个测试之前,这些都应该恢复到原始状态。我已经为$('input')指定了一个keypress事件处理程序,以便将div隐藏在fixture中。

我有两个测试做完全相同的事情:在输入上触发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,因为它是一个fixture,如果第一个测试运行$('#qunit-fixture').find('.has-error').hide();,不应该在第二个测试运行之前撤消它吗?

我认为QUnit在运行每个测试之前删除了您在fixture中添加的元素。因此,在document ready上添加的"keypress"事件处理程序在第二次测试开始时被删除。如果您在每个测试的开始处添加事件处理程序,或者像这样在文档上添加事件处理程序,则可以工作:

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

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