单元错误:测试上下文之外的断言
Qunit error: assertion outside test context
我已经搜索过了,似乎这个错误是由于没有正确使用asyncTest
。然而,根据文件,它似乎是我做正确的。我猜我遗漏了一个小细节,需要一双额外的眼睛……
我试图测试一些代码,使ajax请求得到一个页面,然后在灯箱加载它。直到ajax调用完成并可以显示之后,lightbox-content
才显示在DOM中。所以,我只能在我的onComplete回调中检查它,这是我测试是否正确加载它的地方。
asyncTest('mytest', 1, function() {
utils.lightbox.show('/login', {
onComplete: function() {
ok($('#lighbox-content').is(':visible'), 'Lightbox loaded the /login page.');
start();
}
});
});
我得到错误:
Uncaught Error: assertion outside test context, was at HTMLDivElement.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
断言在 当然,所有这些都包含在 - 但是,当测试"完成"并且我调用
start()
时,事件处理程序仍然存在 - 在调用
start()
之后,ok
在asyncTest
内部的所有进一步调用都是非法的 - 抛出异常
- 我想知道如果超过
expect
中的数字(在您的示例中它是第二个参数)会发生什么。同样的例外?
asyncTest
中。用代码解释:
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
事件仍然可以发生。
相关文章:
- 将函数的上下文应用于javascript变量
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 使用JQuery的动态上下文菜单
- 如何访问UIWebView'的子窗口上下文
- JQuery在单击正文时隐藏上下文菜单
- JQuery上下文菜单显示/隐藏问题
- 如何从HTTP上下文对象中获取Post数据
- HTML字符串作为上下文
- 为什么我的上下文选择器和.buttonset()在ie中花费了这么长时间
- 丢失对象“;这个“;方法中的上下文
- 防止在移动Safari(iPad/iPhone)中长按/长按默认上下文菜单
- d3防止在上下文菜单上触发mouseout
- 是否可以在不更改上下文的情况下调用函数.apply
- 调用$.each()函数时上下文发生变化
- 何时可以;我的用户脚本在Javascript中触发右键单击(上下文菜单)
- 如何向onClick事件处理程序传递一个接受参数的函数,并且仍然将该函数绑定到组件's”;这个“;上下文
- 当已经使用CasperJS选择了css类元素时,断言该类的存在
- Ember.js:将Em.$.getJSON转换为promise并将响应绑定到控制器上下文的正确方法
- 如何在mocha中提供失败断言的上下文
- 单元错误:测试上下文之外的断言