So testen Sie das getan und scheitern Deferred-Objekt mit Jasmin

Hier ist der code, der über die javascript-submit request (1).
Hier ist der test über die Verspottung der ajax-Anfrage durch die Verwendung von Jasmin (2).

Möchte ich verspotte die server Verhalten. Irgendwelche Ideen?
Siehe auch den Kommentar zu (1) und (2) für weitere details.

P. S.:
Eigentlich in beiden Fällen das getan und das scheitern der Latenten Gegenstand der fakeFunction genannt werden.


(1)

submitForm: function () {
     //the server execute fail only if message.val() is empty
     //and I would like to mock this behaviour in (2)
     backendController.submitForm(message.val()).done(this.onSuccess).fail(this.onError);
},

backendController.submitForm = function (message) {
    return $.ajax({
        url: 'some url',
        type: 'POST',
        dataType: 'json',
        data: {
            message: message
        }
    }).done(function () {
        //some code;
    });
};

(2)

describe('When Submit button handler fired', function () {
    var submitFormSpy,
        fakeFunction = function () {
            this.done = function () {
                return this;
            };
            this.fail = function () {
                return this;
            };
            return this;
        };

    beforeEach(function () {
        submitFormSpy = spyOn(backendController, 'submitForm').andCallFake(fakeFunction);
    });

    describe('if the message is empty', function () {
        beforeEach(function () {
            this.view.$el.find('#message').text('');
            this.view.$el.find('form').submit();
        });
        it('backendController.submitForm and fail Deferred Object should be called', function () {
            expect(submitFormSpy).toHaveBeenCalled();
            //how should I test that fail Deferred Object is called?
        });
    });

    describe('if the message is not empty', function () {
        beforeEach(function () {
            this.view.$el.find('#message').text('some text');
            this.view.$el.find('form').submit();
        });
        it('backendController.submitForm should be called and the fail Deferred Object should be not called', function () {
            expect(submitFormSpy).toHaveBeenCalled();
            //how should I test that fail Deferred Object is not called?
        });
    });

});
Mit einem wrapper um deine Ajax-calls wird das testen wesentlich einfacher. Siehe github.com/webadvanced/takeCommand
vielen Dank für Ihren Vorschlag. Eigentlich verstehe ich nicht, warum genau sollte ich verwenden /webadvanced/takeCommand seit $.ajax schon, was ich brauche. Könnten Sie mir Antworten, schreiben einige Beispiel-code?
var spy = spyOn(Klasse, "Methode"); actionThatCallsClassMethod(); erwarten(spy).toHaveBeenCalled(); hat mir geholfen, aus Ihrem Beispiel.

InformationsquelleAutor Lorraine Bernard | 2012-08-22

Schreibe einen Kommentar