我正在使用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
,工作页面“聚焦”创建的树并加载给定的 JSON 数据ANALYSIS_PAPER.change_data
以创建 jstree 结构。在 qunit 测试页面上,这不会发生。DOM 元素仍然是一个 jstree 对象,但该元素是完全空的。
正如包含代码中的注释所示,hide_throbber
被调用(我正在使用sinon spies测试它)并console.log
打印该语句。不会引发异常,也不会指示错误。失败是完全沉默的。
我认为这可能与时间有关,所以我做了我的 qunit 测试 aasyncTest
并添加start();
到传递给的回调函数中,getJSON
但这并没有改变任何东西。我也采取了不同的方法并编辑了fakeServer
with server.autoRespond = true
,但这也没有解决问题。
任何关于进一步测试运行的建议或关于可能导致此问题的想法的任何建议都非常受欢迎。谢谢。