虚假 Ajax 请求

2024-02-14

为了检查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()这样你就不会再有麻烦了。

Update

也许你必须preventDefault() in the 提交事件 so:

spyOn(backendController, 'submitRequest1').andCallFake(function(e) { e.preventDefault(); });

Update 2

在检查了您添加到问题中的其余代码后,我仍然建议尽快停止代码执行。直到考试到来,这仍然是直到backendController.submitRequest1()叫做。

在这种情况下,简单的方法是不够的mock在该方法中由于return随后使用此方法,并且您的mock应该尊重这一点:

// code no tested
var fakeFunction = function(){
  this.done = function(){ return this };
  this.fail = function(){ return this };
  return this;
}

spyOn(backendController, 'submitRequest1').andCallFake( fakeFunction );

当事情开始变得如此复杂而难以测试时,就表明也许可以更好地组织它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

虚假 Ajax 请求 的相关文章

随机推荐