【发布时间】:2023-03-27 03:32:01
【问题描述】:
我有一个触发 ajax 请求的 Jasmine 2.0.2 测试,但是每次触发请求时,模拟 ajax 返回应该是特定的返回值。
var setUpDeleteEventInAjax = function(spyEvent, idToReturn){
var spy;
spy = jasmine.createSpy('ajax');
spyAjaxEvent = spyOnEvent(spyEvent, 'click');
spyOn($, 'ajax').and.callFake(function (param) {
return {
id: idToReturn, // here I am trying to return a defined value
status: true
};
});
spyAjaxEvent.reset(); // this should reset all ajax evetns
};
...
beforeEach(function(){...})
afterEach(function(){...})
...
it('Deleting all the addresses should reveal the form', function () {
setUpDeleteEventInAjax('#delete',52670);
$('#delete').click();
expect($('.address-item').length).toEqual(4);
setUpDeleteEventInAjax('#delete-2',52671);
$('#delete-2').click();
expect($('.address-item').length).toEqual(2);
setUpDeleteEventInAjax('#delete-3',52672);
$('#delete-3').click();
expect($('.address-item').length).toEqual(0);
});
...
点击删除按钮后(delete,delete-2,delete-3)总长度address-items减2,(当服务器返回一个数字时——这就是mock的症结所在)。
但是,jasmine 抱怨说“ajax 已经被监视了”。有没有办法从 ajax 模拟返回一个新值以完成测试?
【问题讨论】:
标签: javascript jquery ajax jasmine