有人可以解释为什么在第三个控制台日志中数据是空的吗?
这是我测试时出现的问题的简化版本。我注意到我的测试功能中没有数据,插入" QUnit.test(...)"。由事件触发的某些功能使用此数据并且正在发生错误。
可以在JsBin
上找到可执行代码
$(document).ready(function() {
$("p").data("thedata", 1);
console.log("First", $("p").data());
});
QUnit.config.autostart = false;
setTimeout(function() {
QUnit.start();
console.log("Second", $("p").data());
}, 1000);
setTimeout(function() {
console.log("Third", $("p").data());
}, 2000);

<html>
<head>
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<link href="http://code.jquery.com/qunit/qunit-2.1.1.css" rel="stylesheet" />
<script src="http://code.jquery.com/qunit/qunit-2.1.1.js"></script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture">
<p>content</p>
</div>
</body>
</html>
&#13;
答案 0 :(得分:1)
好的,看到你的JSBin后我发现了问题所在。部分原因是在上面的代码中你实际上根本没有使用QUnit(没有测试),但真正的问题是每次测试(故意)后都会重置QUnit“灯具”。前两个工作是因为QUnit必须考虑第一个测试,但第三个控制台日志的2000毫秒超时必须在“测试”之后发生,这意味着夹具被重置为其原始HTML。请注意,您在JS中添加数据,而不是在HTML中。
所以......这是您的选择:将数据放入实际的HTML(beforeEach
)中,或者您可以使用$(document).ready(function() {
console.log("First", $("p").data());
});
QUnit.config.autostart = false;
QUnit.module('data', {
beforeEach: function() {
$("p").data("thedata", 1);
console.log("before each", $("p").data());
}
});
QUnit.test('data delay', function(assert) {
let done = assert.async();
setTimeout(function() {
console.log("Second", $("p").data());
}, 1000);
setTimeout(function() {
console.log("Third", $("p").data());
assert.ok($("p").data());
assert.equal($("p").data().thedata, 1);
done();
}, 2000);
});
QUnit.start();
挂钩设置正确的QUnit测试(这是我的首选选项) 。以下是选项二的代码和working JSBin。
maven-shade-plugin