【发布时间】:2015-05-28 01:53:13
【问题描述】:
我是 QUnit 的新手,我正试图弄清楚如何恢复 #qunit-fixtures。据我了解,在运行新测试之前,该元素中的所有内容都会被重置。然而,我看到(对我来说是什么)一些奇怪的东西。在下面的例子中,fixture 中有一个form,它只包含一个input 元素和一个div 类has-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