2

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);
    }
}
4

1 に答える 1

1

テストでは「backendController.submitRequest1を呼び出す必要があります」と表示されているため、呼び出されるメソッドのみを考慮します。ですから、そうしないandCallThrough()でください。そうすれば、問題は発生しません。

アップデート

たぶんあなたはpreventDefault()提出イベントに参加しなければならないので:

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

アップデート2

質問に追加した残りのコードを確認した後でも、できるだけ早くコードの実行を停止することをお勧めします。テストが到着するまで、そしてこれはまだbackendController.submitRequest1()呼び出されるまでです。

この場合、このメソッドの戻り値が後で使用されるため、メソッドの単純なモックでは十分ではなく、モックはこれを尊重する必要があります。

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

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

物事がテストするのが非常に複雑になり始めたときは、おそらくそれらをよりよく整理できる症状です。

于 2012-08-22T09:35:52.683 に答える