我目前正在尝试使用jasmine测试我的javascript代码。直到现在我还需要模拟ajax请求。我目前使用jasmine 1.2和mock-ajax.js我的代码如下:
我有一个handler.js文件,它基本上有很多ajax请求。我正在使用require.js来读取具有相关网址的config js文件。
define(['urlConfig'], function (urlConfig) {
return {
getAllCustomers: function () {
return $.ajax({
url: config.url,
dataType: 'json',
xhrFields: {
withCredentials: true
},
});
}
}
所以基本上我现在已经创建了一个规范来测试ajax请求是否会被命中。
define(["/../dependencies/squire.js"], function(Squire) {
var injector;
beforeEach(function() {
injector = new Squire();
jasmine.Ajax.install();
});
describe("handler", function() {
var mockData = {
data: [
{
reference: "ref1",
name: "bob"
},
{
reference: "ref2",
name: "fred"
}
]
}
function loadModule() {
mockHandler();
}
function mockHandler() {
injector.mock('handlers/Handler', {
getAllCustomers: function() {
return {
then: function(callback) {
callback(mockData);
}
}
}
});
};
describe("get all customers", function() {
beforeEach(function() {
loadModule();
});
it('expect to get all account details on request', function() {
spyOn($, "ajax").andCallFake(function(options) {
options.success();
});
var callback = jasmine.createSpy();
mockHandler().getCustomerDetails(callback);
expect(callback).toHaveBeenCalled();
});
});
});
});
不确定上述内容是否正确,但也会收到错误消息 TypeError:' undefined'不是一个函数(评估' spyOn($," ajax")。和CallFake(函数(选项)
任何帮助都是好的
答案 0 :(得分:2)
在Jasmine 2.0版中,函数.andCallFaketo()
更改为.and.callFake()
。像这个例子:
spyOn().and.callFake(function() {
return 1001;
});
答案 1 :(得分:0)