Qunit数据已删除

时间:2017-08-30 12:47:16

标签: javascript jquery qunit

有人可以解释为什么在第三个控制台日志中数据是空的吗?

这是我测试时出现的问题的简化版本。我注意到我的测试功能中没有数据,插入" 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;
&#13;
&#13;

1 个答案:

答案 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