虽然我过去使用过 QUnit,但我已经有一年没有真正使用它了,所以我希望这是一件微不足道的事情!
我有一堆运行良好的 QUnit 测试,除了每次加载页面时都会失败的测试。如果我刷新,测试有效,但如果我再次刷新它会中断!它变得可以预测,但我不明白为什么它不起作用。有问题的测试应该使用一个trigger('change')
事件,但这只会每隔一次触发一次。
我有一个动态填充的select
,我将一个change
事件绑定到。它所做的所有事情都将值保存到localStorage
并且我刚刚检查了该值是否已设置的测试。
示例 HTML:
<select id="options">
<option value="">Please choose</option>
</select>
<p id="result"></p>
示例 JS:
$(document).ready(function() {
var data = {
1: 'Option 1',
2: 'Option 2',
3: 'Option 3'
}
for(var d in data) {
$('#options').append($('<option>').val(d).text(data[d]));
}
$('#options').on('change', function() {
$('#result').text(this.value);
if(this.value != '') {
localStorage.setItem('optionValue') = this.value;
} else {
throw 'You must choose a team';
}
});
});
示例 QUnit 测试:
test('Test some other stuff', function(assert) {
localStorage.removeItem('optionValue');
// some tests to check things have worked correctly
});
test('Is value added to localStorage?', 2, function(assert) {
throws(function() { throw new $('#chooseTeam').val('').change(); }, 'No option selected');
$('#options').val(1).trigger('change');
equal(localStorage.getItem('optionValue'), 1, 'The first item should be selected');
});
但是,QUnit 输出中的结果是undefined
. 我将其缩小到第一个测试,然后能够看到它localStorage.removeItem('optionValue')
是每次调用的行,但更改事件仅每隔一次触发一次。
我创建了一个 JS fiddle 来尝试演示问题: http: //jsfiddle.net/cchana/zqNtU/3/(演示显示了它应该如何工作,但不是失败的测试)
有什么明显的东西会让这个失败吗?
更新
以为我应该更新一些可能有帮助的信息...
在更改方法中,我添加了一个console.log()
,如下所示:
$('#options').on('change', function() {
console.log('here');
});
我只是想检查一下 change 事件是否真的被触发了,但正如测试显示的那样,该方法只是每隔一次触发一次。
更新 2
为了让我的测试通过,我删除了localStorage.removeItem('optionValue');
不理想的行,如果可能的话,我仍然想深入了解它!