【发布时间】:2013-03-31 04:55:23
【问题描述】:
我正在使用 sinon.js / qunit 编写函数测试。我编写测试的页面工作正常,但是在测试中使用 sinon 伪造服务器响应时,我无法让 jstree 对象加载其初始数据。
为了确保我正在测试的页面和我正在编写的测试使用相同的响应数据,我创建了一个名为 change_dialog_fixture 的 javascript 对象夹具,我将其加载以代替从服务器返回的数据。您可以在下面对getJSON 的调用中看到这一点:
$.getJSON(axes_url, function(data) {
//ANALYSIS_PAPER.change_data = data;
ANALYSIS_PAPER.change_data = change_dialog_fixture;
hide_throbber(); // sinon confirms this is called
create_change_dialog();
console.log(ANALYSIS_PAPER.change_data); // prints
});
通过单步执行代码,我可以看到对于两个页面(工作页面和测试页面),被操作到 jstree 对象中的 DOM 元素(通过 create_change_dialog 函数)直到 之后才加载其数据 getJSON 返回。
getJSON 返回后,工作页面“聚焦”创建的树并加载ANALYSIS_PAPER.change_data 中给出的 JSON 数据以创建 jstree 结构。在 qunit 测试页面上,这不会发生。 DOM 元素仍然是一个 jstree 对象,但该元素是完全空的。
正如包含代码中的 cmets 所示,hide_throbber 被调用(我正在使用 sinon spies 进行测试)并打印 console.log 语句。不会引发异常,也不会指示错误。失败是完全无声的。
我认为这可能与时间有关,所以我做了我的 qunit 测试 asyncTest 并将 start(); 添加到传递给 getJSON 的回调函数中,但这并没有改变任何东西。我也采取了不同的方法,用server.autoRespond = true 编辑了fakeServer,但这也没有解决问题。
非常欢迎任何有关进一步测试运行的建议或有关可能导致此问题的原因的想法。谢谢。
【问题讨论】: