QUnit没有运行外部JavaScript文件
我试图修改教程here以使用QUnit v2.x,但它似乎没有找到我想测试的JavaScript文件。QUnit没有运行外部JavaScript文件
的test.html
<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.js"></script>
<script src="../list.js"></script>
<script>
QUnit.test("errors should be hidden on keypress", function (assert) {
$('input').trigger('keypress');
assert.equal($('.has-error').is(':visible'), false);
});
</script>
list.js
jQuery(document).ready(function ($) {
$('input').on('keypress', function() {
$('.has-error').hide();
});
});
试验失败的真正
结果本教程中提供的代码工作正常QUnit 1.23
<script>
/*global $, test, equal */
test("errors should be hidden on keypress", function() {
$('input').trigger('keypress');
equal($('.has-error').is(':visible'), false);
});
test("errors not be hidden unless there is a keypress", function() {
equal($('.has-error').is(':visible'), true);
});
</script>
编辑:使用QUnit v1.23这两个版本的测试工作!
所以,这个问题已经出现在SO上的multiple other places。基本上发生的事情是QUnit 2以不同的方式处理灯具。您的代码将一个事件处理程序添加到原始HTML中,但随后QUnit杀死该HTML并重建它,从而删除您的处理程序。解决办法是在内部执行绑定的事件,而不是页面加载。这里是a fiddle一起玩,但代码如下:
function init() {
$('.username').on('keypress', function() {
console.log('hiding error!');
$('.has-error').hide();
});
}
QUnit.test("errors should be hidden on keypress", function(assert) {
init();
$('.username').trigger('keypress');
assert.strictEqual($('.has-error').is(':visible'), false);
});
QUnit.test("errors not be hidden unless there is a keypress", function(assert) {
init();
assert.strictEqual($('.has-error').is(':visible'), true);
});
所以我必须将所有代码包装在QUnit的函数中?这似乎很愚蠢 –
@Peregrinius我乞求不同。您的代码应该设计在可以进行单元和(单元)集成测试的组件中,并彼此独立地进行测试。与只依赖和测试全局状态相比,测试变得更加明确和更易维护。 如果你使用'beforeEach'钩子,上面的代码可能会更好看一些。 –
@Peregrinius你不需要把所有的代码都写在函数中,但是如果你不这样做,那么你就会陷入混乱。除此之外,QUnit通过在每次测试之前重置HTML来做正确的事情。这是HTML设备的行业标准。 – jakerella
你确定你的*的test.html的所有脚本路径*妥善解决?如果测试失败,那么它似乎就像* list.js *中的代码没有运行。 –
将代码放在测试上方的脚本标记中时,它仍然不起作用。我不确定那是否按预期工作。 list.js文件可以在Web Inspector资源中访问。 –
我想你错过了教程中的HTML部分呢?没有你的选择器'.has-error'将不会选择任何东西。 我创建了[这个小提琴](https://jsfiddle.net/vhjparpv/#&togetherjs=PpGJ5xKVrA),两个测试都正常。 –