Jasmine、spyOn、getJSON 和失败
Jasmine, spyOn, getJSON and fail
我正在尝试学习 Jasmine spyOn 函数。当使用 spyOn 测试调用 的函数时,我得到 TypeError: Cannot read 属性 'fail' jQuery.getJSON。
这是我要测试的功能:
getJsonServerNine: function () {
'use strict';
$.getJSON(queryServer.url, function(simpleJson) {
parseResponse(simpleJson);
}).fail(function(error) {
console.log(error.statusText);
});
}
这是我的测试:
it("tests getJSON call", function() {
spyOn($, 'getJSON').and.callFake(function (url, success) {
success({
"nine": 9
});
});
queryServer.getJsonServerNine();
expect(queryServer.queryResult).toBe(9);
});
如果我从 getJsonServerNine() 中删除 fail 回调,那么我的代码就可以工作了。如果我调用 jquery.ajax() 而不是 getJSON 那么我可以找到一种方法让它工作。如何通过调用 $.getJSON?
让它工作
我已经看到 this answer 类似的问题,它非常好,但与我的情况不相符,对我不起作用,并且使用了过时的 Jasmine 语法。
由 $.getJSON 编辑的对象 return 应该有一个 fail() 方法。在您的实施中,它 return 未定义。
假函数应该return一个像这样的对象:
// Source
var queryServer = {
getJsonServerNine: function () {
'use strict';
$.getJSON(queryServer.url, function (simpleJson) {
// parseResponse(simpleJson);
console.log(simpleJson)
queryServer.queryResult = simpleJson[Object.keys(simpleJson)[0]];
}).fail(function (error) {
console.log(error.statusText);
});
}
}
// Test
describe('foo', function () {
it("tests getJSON call", function () {
spyOn($, 'getJSON').and.callFake(function (url, success) {
success({
"nine": 9
});
return {
fail: function() {}
}
});
queryServer.getJsonServerNine();
expect(queryServer.queryResult).toBe(9);
});
});
在这里查看 JS fiddle - http://jsfiddle.net/eitanp461/32e17uje/
我正在尝试学习 Jasmine spyOn 函数。当使用 spyOn 测试调用 的函数时,我得到 TypeError: Cannot read 属性 'fail' jQuery.getJSON。
这是我要测试的功能:
getJsonServerNine: function () {
'use strict';
$.getJSON(queryServer.url, function(simpleJson) {
parseResponse(simpleJson);
}).fail(function(error) {
console.log(error.statusText);
});
}
这是我的测试:
it("tests getJSON call", function() {
spyOn($, 'getJSON').and.callFake(function (url, success) {
success({
"nine": 9
});
});
queryServer.getJsonServerNine();
expect(queryServer.queryResult).toBe(9);
});
如果我从 getJsonServerNine() 中删除 fail 回调,那么我的代码就可以工作了。如果我调用 jquery.ajax() 而不是 getJSON 那么我可以找到一种方法让它工作。如何通过调用 $.getJSON?
让它工作我已经看到 this answer 类似的问题,它非常好,但与我的情况不相符,对我不起作用,并且使用了过时的 Jasmine 语法。
由 $.getJSON 编辑的对象 return 应该有一个 fail() 方法。在您的实施中,它 return 未定义。
假函数应该return一个像这样的对象:
// Source
var queryServer = {
getJsonServerNine: function () {
'use strict';
$.getJSON(queryServer.url, function (simpleJson) {
// parseResponse(simpleJson);
console.log(simpleJson)
queryServer.queryResult = simpleJson[Object.keys(simpleJson)[0]];
}).fail(function (error) {
console.log(error.statusText);
});
}
}
// Test
describe('foo', function () {
it("tests getJSON call", function () {
spyOn($, 'getJSON').and.callFake(function (url, success) {
success({
"nine": 9
});
return {
fail: function() {}
}
});
queryServer.getJsonServerNine();
expect(queryServer.queryResult).toBe(9);
});
});
在这里查看 JS fiddle - http://jsfiddle.net/eitanp461/32e17uje/