QUnit 固定装置不是每次都被恢复
QUnit fixtures not being restored every time
我是 QUnit 的新手,我想弄清楚 #qunit-fixtures
是如何恢复的。据我了解,该元素中的所有内容都在新测试 运行 之前重置。但是,我看到(对我来说是什么)一些奇怪的东西。在下面的示例中,夹具中有一个 form
,它仅由一个 input
元素和一个带有 class has-error
的 div
组成。所以据我了解,每次测试前都是运行,这些应该恢复到原来的状态。
我已经为 $('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,因为它是一个 fixture,如果第一个测试 运行s $('#qunit-fixture').find('.has-error').hide();
,这不应该在之前撤消吗第二个测试是 运行?
我认为 QUnit 会在运行每个测试之前删除您在夹具中添加的元素。因此,在第二次测试开始时,在文档就绪时添加的 "keypress" 事件处理程序将被删除。如果您在每次测试开始时添加事件处理程序,或者像这样在文档准备好时添加事件处理程序,它将起作用:
$("body").on("keypress","input",function( event ) {
$('.has-error').hide();
});
QUnit 可能不会在第一次测试时删除它,这解释了为什么它第一次工作。
我是 QUnit 的新手,我想弄清楚 #qunit-fixtures
是如何恢复的。据我了解,该元素中的所有内容都在新测试 运行 之前重置。但是,我看到(对我来说是什么)一些奇怪的东西。在下面的示例中,夹具中有一个 form
,它仅由一个 input
元素和一个带有 class has-error
的 div
组成。所以据我了解,每次测试前都是运行,这些应该恢复到原来的状态。
我已经为 $('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,因为它是一个 fixture,如果第一个测试 运行s $('#qunit-fixture').find('.has-error').hide();
,这不应该在之前撤消吗第二个测试是 运行?
我认为 QUnit 会在运行每个测试之前删除您在夹具中添加的元素。因此,在第二次测试开始时,在文档就绪时添加的 "keypress" 事件处理程序将被删除。如果您在每次测试开始时添加事件处理程序,或者像这样在文档准备好时添加事件处理程序,它将起作用:
$("body").on("keypress","input",function( event ) {
$('.has-error').hide();
});
QUnit 可能不会在第一次测试时删除它,这解释了为什么它第一次工作。