jasmine-test-Funktion, die eine Zusage zurückgibt

Habe ich die folgende Implementierung der Funktion

function getRepo(url) {
    var repos = {};

    if (repos.hasOwnProperty(url)) {
        return repos[url];
    }

    return $.get(url)
        .then(repoRetrieved)
        .fail(failureHandler);

    function repoRetrieved(data) {

        return repos[url] = data;
    }

    function failureHandler(err, xhr) {
        throw new Error(xhr.responseText);
    }
}

Und ich schrieb die folgenden tests:

describe('"getRepo" method', function() {
    var getDeffered;
    var $;

     beforeEach(function() {
         getDeffered = Q.defer();
         $ = jasmine.createSpyObj('$', ['get']);
         $.get.and.returnValue(getDeffered.promise);
     });

     it('should return a promise', function(){
         expect(getRepo('someURL')).toEqual(getDeffered.promise);
     });

});

Und dieser test schlägt fehl. Ich denke, da rufe ich die Methode dann.

Es nicht scheitern, wenn die Implementierung der Funktion ist:

function getRepo(url) {
    return $.get(url);
}

dies ist die Botschaft, Jasmin wirft bei der Verwendung von Q. defer()

Expected { promiseDispatch : Function, valueOf : Function, inspect : Function }
to equal { promiseDispatch : Function, valueOf : Function, inspect : Function }.

- Und dies ist die Botschaft, wenn ich jQuery Deferred:

Expected { state : Function, always : Function, then : Function, promise : Function, pipe : Function, done : Function, fail : Function, progress : Function } 
to equal { state : Function, always : Function, then : Function, promise : Function, pipe : Function, done : Function, fail : Function, progress : Function }.

jQuery Deferred-test Durchführung:

describe('"getRepo" method', function() {
    var getDeffered;
    var $;

    beforeEach(function() {
        getDeffered = real$.Deferred();
        $ = jasmine.createSpyObj('$', ['get']);
        $.get.and.returnValue(getDeffered.promise());
    });

    it('should return a promise', function(){
        expect(getRepo('someURL')).toEqual(getDeffered.promise());
    });

});
  • 1) Verspricht in jQuery und verspricht in Q sind verschiedene Objekte; 2) Sie sind die Freigabe der Zalgo durch mischen sync und async Antworten in Ihrem code, bitte nicht.
  • Und zwischen, beiden Versprechungen sind plain/Objekt und Sie sind Instanz von Versprechen.
  • Sie sind. wie gesagt, ich bin mocking jQuery, und seine Methode "get" gibt die latente, die ich definiert durch Q. defer()
  • Das problem ist, dass $.Deferred().then() wieder die gleichen Versprechen, es ist genannt, aber Q ' s gibt eine neue.
  • Ich habe aktualisiert mein Frage.. und fügte hinzu, Jasmin Ausnahmen. bitte werfen Sie einen Blick wieder
  • Mit Q es ist klar (wie gesagt, Sie überprüfen Q.Defer().promise gegen Q.Defer().promise.then().fail(), das sind zwei verschiedene zusagen); mit jQuery, es ist nicht klar, wie setzen Sie es im test. BTW, was ist dein Ziel hier? Es ist ein bisschen redundant, wenn Sie nur wollen, um zu überprüfen, ob oder nicht Sie bekommen das Versprechen, als ein Ergebnis Ihres Anrufs.
  • Ich fügte hinzu, jQuery Deferred test-Durchführung

InformationsquelleAutor Saif Adnan | 2015-12-28
Schreibe einen Kommentar