伪造的Ajax请求
Fake Ajax request
为了检查ajax请求的提交情况,当用户提交表单时,我使用jasmine(1)实现了以下测试。
测试成功通过,但在javascript控制台上,我得到以下错误500 (Internal Server Error)
。
由于我不关心服务器的响应,我的问题是:
1) 我应该还是不应该关心这个错误
2) 伪造ajax请求以避免Internal Server Error
会更好吗?如果是,在我的背景下如何?
(1)
define([
'backendController'
], function (backendController) {
// some code
describe('When button handler fired', function () {
beforeEach(function () {
spyOn(backendController, 'submitRequest1').andCallThrough();
this.view = new MyView({
el: $('<div><form><input type="submit" value="Submit" /></form></div>')
});
this.view.$el.find('form').submit();
});
it('backendController.submitRequest1 should be called', function () {
expect(backendController.submitRequest1).toHaveBeenCalled();
});
});
});
(2)
// backendController object
return {
submitRequest1: function (message) {
return $.ajax({
url: 'someUrl',
type: 'POST',
dataType: 'json',
data: {
message: message
}
}).done(function () {
// some code
});
}
}
(3)
// submitForm in MyView
submitForm: function (event) {
event.preventDefault();
var formElement = event.currentTarget;
if (formElement.checkValidity && !formElement.checkValidity()) {
this.onError();
} else {
backendController. submitRequest1('some data').done(this.onSuccess).fail(this.onError);
}
}
您的测试表明"backendController.submitRequest1应该被调用",所以您只关心要调用的方法。所以,只要不要andCallThrough()
,你就会没有麻烦。
更新
也许你必须在提交事件中preventDefault()
,所以:
spyOn(backendController, 'submitRequest1').andCallFake(function(e) { e.preventDefault(); });
更新2
在检查完您添加到问题中的其余代码后,我仍然建议尽快停止代码执行。直到测试到达,这仍然是直到调用backendController.submitRequest1()
。
在这种情况下,在方法中使用简单的mock是不够的,因为随后会使用该方法的return,并且您的1mock应该尊重这一点:
// code no tested
var fakeFunction = function(){
this.done = function(){ return this };
this.fail = function(){ return this };
return this;
}
spyOn(backendController, 'submitRequest1').andCallFake( fakeFunction );
当事情开始变得如此复杂时,测试是一种症状,也许可以更好地组织它们。
相关文章:
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- jQuery Ajax GET请求工作不正常
- "日期“;AJAX请求返回的类型值未定义
- Django - 响应请求 AJAX
- 使用 jQuery 的 CORS 请求 - $.ajax()
- 如果无线电值为 ==1,则请求 ajax
- 如何处理对循环中发出的多个异步请求(AJAX 调用)的响应
- POST请求ajax jquery错误
- CasperJS don'我没有请求AJAX
- 使用这种Facebook风格的Lightbox-请求AJAX-在一个页面上覆盖多个按钮
- 400错误请求ajax post请求
- 如何在开始发送请求ajax之前延迟3秒
- 与jQuery同时请求AJAX
- 使用POST请求AJAX发送json对象