Javascript Qunit错误:测试上下文之外的断言
我搜索了所有地方,发现这个错误是由于没有正确使用Javascript Qunit错误:测试上下文之外的断言,javascript,qunit,Javascript,Qunit,我搜索了所有地方,发现这个错误是由于没有正确使用asyncTest造成的。然而,根据文档,似乎我做的是正确的。我猜我遗漏了一个小细节,需要一双额外的眼睛 我正在测试一些代码,这些代码发出ajax请求以获取页面,然后将其加载到lightbox中lightbox内容在ajax调用完成并可以显示之前不会显示在DOM中。因此,我只能在onComplete回调中检查它,这是我测试的地方,以查看它是否正确加载 这是我的密码: asyncTest('mytest', 1, function() { u
asyncTest
造成的。然而,根据文档,似乎我做的是正确的。我猜我遗漏了一个小细节,需要一双额外的眼睛
我正在测试一些代码,这些代码发出ajax请求以获取页面,然后将其加载到lightbox中<代码>lightbox内容在ajax调用完成并可以显示之前不会显示在DOM中。因此,我只能在onComplete回调中检查它,这是我测试的地方,以查看它是否正确加载
这是我的密码:
asyncTest('mytest', 1, function() {
utils.lightbox.show('/login', {
onComplete: function() {
ok($('#lighbox-content').is(':visible'), 'Lightbox loaded the /login page.');
start();
}
});
});
我得到一个错误:
Uncaught错误:测试上下文之外的断言位于htmldevelment.window.utils
有人知道我哪里出错了吗?就我所知,我同意您的代码与文档相匹配 更新 即使文档没有显示它,我想知道您是否必须告诉QUnit在某个点停止,以便它知道在测试函数返回后等待。我认为QUnit假设这是一个异步测试,但值得一试
asyncTest('mytest', 1, function() {
stop();
...
});
我一直在使用Sinon.JS来避免一开始就进行AJAX调用。这有三个直接好处:
module("geo", {
setup: function () {
this.server = sinon.fakeServer.create();
},
teardown: function () {
this.server.restore();
}
}
test("returns detected ZIP code", function () {
this.server.respondWith("/geo/detect-zip-from-ip",
[ 200, { "Content-Type": "text/html" }, '90210' ]);
geo.detectZip(function (zip) {
assertThat(zip, is('90210'));
});
this.server.respond();
});
我已经为我的案例找到了解决方案,希望你的问题也有相同的根源 用文字说明:
- 我有一个复杂的异步测试
- 我有延迟事件,里面有
和ok
断言equal
- 当然,所有这些都包装在
asyncTest
- 但是,当测试“完成”并且我调用
时,事件处理程序仍保留在那里start()
- 调用
后,在start()
中对asyncTest
的所有进一步调用都将变为非法ok
- 并抛出异常
- 我想知道如果超出
中的数字(在您的示例中,它是第二个参数),会发生什么情况。同样的例外expect
asyncTest('mytest', /*1,*/ function() {
function imgLoadedOrFailed (result) {
clearTimeout(imageTimeToLive);
img.off();
ok(result, 'Image in carousel pane has been loaded');
}
var imageTimeToLive = setTimeout(
imgLoadedOrFailed.bind(this, false),
5000),
img = panes[index].find('img:first');
if (img) {
img.on('load', imgLoadedOrFailed.bind(this, true));
img.on('error', imgLoadedOrFailed.bind(this, false));
}
});
// at some point I call: start();
在本例中,当我“完成”调用
start()
的测试时,onload
和onerror
事件仍然会发生。谢谢David。我来试试看。我仍然对Qunit问题感兴趣。这对我来说是“停止();”的事情。谢谢提醒。:)@在RGC中,解决这个问题的运气好吗?lighbox内容中缺少的t
是否是发布问题时的一个打字错误?我有相同的错误消息,错误出现在on('load'
callback中,而不是onComplete中,但我认为这在幕后是一样的。您是否尝试过降级到不同的QUnit版本?