Приспособленията на QUnit не се възстановяват всеки път

Нов съм в QUnit и се опитвам да разбера как се възстановяват #qunit-fixtures. Доколкото разбирам, всичко в този елемент се нулира преди стартирането на нов тест. Виждам обаче (това, което е за мен) нещо странно. В примера по-долу има form във фиксирането, което се състои само от input елемент и div с клас has-error. Така че, както разбирам, преди всеки тест да бъде изпълнен, те трябва да бъдат възстановени до първоначалното си състояние. Посочих keypress манипулатор на събития за $('input'), за да скрия div в приспособлението.

Имам два теста, които правят абсолютно същото: задействат keypress на входа и твърдят, че текстът за грешка е скрит.

Това, което виждам е, че само един първия минава. Може ли някой да ми обясни това поведение?

<html>
  <head>
    <link rel="stylesheet" href="/bgqunit-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 действа върху приспособлението, тъй като това е приспособление, ако първият тест се изпълнява $('#qunit-fixture').find('.has-error').hide();, не трябва ли това да се отмени, преди да се изпълни вторият тест?


person VMrx    schedule 26.05.2015    source източник
comment
Изглежда като малко вероятен тестов сценарий, провеждането на тестове на самото приспособление. Предложение: опитайте други по-типични тестове.   -  person Norman Cousineau    schedule 27.05.2015
comment
Виждам това като тестове на манипулаторите на събития, а не на приспособленията...   -  person VMrx    schedule 27.05.2015
comment
По подразбиране QUnit ще промени реда на тестовете. За да запазите реда, направете това QUnit.config.reorder = false; Така че във вашия случай винаги се проваля вторият тест, който се изпълнява. За да получите пълен отговор на този въпрос, може да искате да обясните точно защо правите този тест, защото наистина изглежда странно...да извършите тест на част от устройството, без да знаете какъв друг qunit код може да действа върху него.   -  person Norman Cousineau    schedule 27.05.2015
comment
Благодаря. Това наистина е полезно. Така че сега разбирам защо неуспешният тест се редуваше между двата. Редактирах въпроса, за да изясня, че тествам манипулатора на събития. Може би просто не разбирам какво трябва да представлява приспособлението, но си помислих, че това е нещо, което се възстановява до първоначалното си състояние преди всеки тест да бъде изпълнен.   -  person VMrx    schedule 27.05.2015
comment
Приспособлението е там само за използване от QUnit, не е предназначено да бъде докосвано от нашите тестове.   -  person Norman Cousineau    schedule 27.05.2015
comment
Но дори пример за въведението на QUnit включва докосване на това, което е в $('#qunit-fixture'). Ако приспособлението не е предназначено за докосване, за какво точно е предназначено?   -  person VMrx    schedule 27.05.2015
comment
Проверих това, не знаех. Поставяйки го в елемента #qunit-fixture, не е нужно да се тревожим за промените в DOM от един тест, които засягат други тестове, защото QUnit автоматично ще нулира маркирането след всеки тест.   -  person Norman Cousineau    schedule 27.05.2015


Отговори (1)


Мисля, че QUnit премахва елемента, който сте добавили във фиксирането, преди да изпълни всеки тест. Така че манипулаторът на събитие "натискане на клавиш", добавен към готовия документ, се премахва до момента, в който започне вторият тест. Ще работи, ако добавите манипулатора на събития в началото на всеки тест или върху готов документ по следния начин:

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

QUnit може да не го премахне при първия тест, което обяснява защо работи първия път.

person Norman Cousineau    schedule 27.05.2015
comment
Благодаря много. Току що разбрах това! - person VMrx; 27.05.2015