茉莉间谍以假ajax调用来测试回调结果
Jasmine spy to fake ajax call to test callback results
我正在使用Jasmine 2.0,并尝试在ajax调用之后测试回调的结果。我已经尝试了一些我在网上找到的东西,但没有找到解决我问题的方法。我是Jasmine和JQuery的新手,并且在这个问题上遇到了相当困难的时间。如有任何建议,不胜感激。
下面是正在测试的示例代码:
//common.js
function getSomeServiceResponse(method, param, callback) {
$.ajax({
dataType: "json",
url: "https://some.thing.com/api/mobile/" + method,
data: param
})
.done(function (data) {
var response = $.parseJSON(data);
//some stuff
if ($.isFunction(callback)) {
callback(response);
}
})
.fail(function (jqXHR, textStatus) {
//some error handling stuff
if ($.isFunction(callback)) {
callback({
ResultNumber: -1,
});
}
});
}
//main.js
var someGlobalObj = {
//some stuff for global obj
//some funcs
querySession: function (callback) {
//Some validation stuff
getSomeServiceResponse(
"querysomesession", {
//some params
},
function (data) {
someGlobalObj.sessionData = data.Session;
someGlobalObj.info = data.Info;
if ($.isFunction(callback)) {
callback(data);
}
}
);
}
}
测试(请随意评论测试设置/布局,因为我是新手,可能是不正确的):
describe("querySession()", function () {
describe("with existing session found", function () {
var response;
beforeEach(function () {
spyOn($, 'ajax').and.callFake(function (req) {
var d = $.Deferred();
var data = {
"Info": [],
"Session": {
"ID": 999,
"DateCreate": "'/Date(1398966244520)'/",
//Some other stuff
},
"ResultNumber": 0,
};
d.resolve(data);
return d.promise();
});
someGlobalObj.sessionId = 1;
someGlobalObj.querySession(function (data) {
response = data;
});
});
it("should set someGlobalObj.sessionData with an ID of 999", function () {
//expect(someGlobalObj.sessionData.ID).toBe(999);
expect(response.Session.ID).toBe(999);
});
简而言之,someGlobalObj。querySession被调用并传递回调给它。在querySession中,调用getSomeServiceResponse时,会传递给它一个回调(调用原始回调)。在回调触发之后,我希望传入填充响应的数据是在someGlobalObj中设置的数据。这不是我的代码,但我可以回答一些问题,如果有任何。
编辑现在我要进入假的,因为我已经添加了一些控制台日志记录。测试失败,报错:"SyntaxError: Unexpected token o"。如果我只执行d.resolve('fake'),我将得到"Unexpected token k"。
我发现了意想不到的令牌语法错误的问题。
罪犯是:
var data = {
"Info": [],
"Session": {
"ID": 999,
"DateCreate": "'/Date(1398966244520)'/",
//Some other stuff
},
"ResultNumber": 0,
};
在getSomeServiceResponse.done: var response = $.parseJSON(data);
我将数据更改为JSON来解决这个问题。最初的问题是,有一些验证,我没有捕获阻止getsomeservicerresponse甚至被调用,所以间谍从未被使用。这在我的问题中是模糊的,因为我已经删除了验证代码。
对不起,浪费了你的时间。相关文章:
- 测试Angular Service解决错误回调中的promise
- 当我的单元测试失败时,回调被调用了两次
- 使用jasmine测试JavaScript回调函数
- $watch回调每次在浏览器中触发,但在测试期间只触发一次
- 如何在没有空回调的情况下测试多个调用
- 使用qunit.js查询事件回调测试
- 使用Mocha.js进行Javascript测试:如何模拟Mocha中的回调
- Sinon-带有回调的存根函数-导致测试方法超时
- 调度程序未在开玩笑单元测试中注册回调
- 在 chai 测试中未由请求调用回调
- 省略摩卡回调测试
- 使用 Jasmine 测试异步回调
- AngularJS:如何在指令中测试回调函数
- 如何在javascript中单元测试回调逻辑
- 在nodejs函数中测试回调
- 我如何测试回调*不't*运行
- 在Jasmine中测试回调方法的功能
- 茉莉-测试回调
- 茉莉间谍以假ajax调用来测试回调结果
- 茉莉测试承诺.如何测试回调函数