【发布时间】:2012-07-07 13:20:03
【问题描述】:
我正在使用 casperjs 编写端到端测试,并希望伪造 ajax 服务器响应
我想到了包含一个简单的脚本来模拟 xmlhttprequest 对象并始终返回我的预期结果,如下所示
var ajax_requests = [
['GET', '/jobs', JSON.stringify(jobs)]
], stubs = stubs || {};
function setup_ajax(){
stubs.server = sinon.fakeServer.create();
_.each(ajax_requests, function(r){
//r[1] = "http://localhost:8000" + r[1]
r[2] = [200, { "Content-Type": "application/json" }, r[2]]
stubs.server.respondWith.apply(stubs.server, r)
})
stubs.server.autoRespond = true;
stubs.server.autoRespondAfter = 2;
}
然后我在我的 casper 测试中调用 setup_ajax,例如
casper.then(function(){
this.evaluate(setup_ajax)
}
但看似未来的 ajax 请求仍然避免我的 xmlhttprequest 实现。
我尝试过运行 setup_ajax,使用 $.ready() 并从 casper 调用它,但这些都不起作用
更有趣的是,检查对象是否存在异常失败。
function setup_ajax(){
return typeof(sinon)
}
casper.then(function(){
var x = this.evaluate(setup_ajax)
casper.log(x) // logs 'null'
}
但是 sinon 是正确包含的,至少当我在 setup_ajax 函数之外对其进行一些调用时,casper 没有导致任何错误,但是当我故意排除 sinon 时会导致错误。
你对 casperjs 下的 mocking xmlhttprequests 有什么想法吗?
【问题讨论】:
标签: javascript testing mocking sinon casperjs