3 Stimmen

Jasmine-Test mit httpBackend liefert nicht das erwartete Ergebnis.

Ich habe einen sehr einfachen Unittest für meinen $resource-umhüllenden Dienst. ich habe httpBackend gemockt und eingerichtet, um ein Array von sieben Elementen zurückzugeben. Wenn ich den Test ausführe, wird berichtet, dass 4 Elemente zurückgegeben wurden, nicht 7:

Funktion (a1, a2, a3, a4) { ... }

Erwartet wurde, dass 4 7 ist.

Unten ist mein Dienst und meine Spezifikation

\=== Dienst ===

/* original 
angular.module('TeamSportApp')
.factory('LedgerService', function ($resource) {
    var Ledgers =  $resource("/rest/api", { id: '@id'},
        {
            allLedgers : { method: 'GET', isArray: true},
            postTransaction : { method: 'POST'},
            removeTransaction : { method: 'DELETE'}
        });
    return Ledgers;
})*/

/* Fixed */
    .factory('LedgerService', function ($resource) {
    var Ledgers =  $resource("/rest/api/:id", { id: '@id' },
        {
            allLedgers : { method: 'GET', isArray: true},
            postTransaction : { method: 'POST'},
            removeTransaction : { method: 'DELETE'}
        });
    return Ledgers;
})

})

\=== spezifikation ===

 var ledgerArray = [
 {id:1, name:"Master Ledger"},
 {id:2, name:"User1 Ledger"},
 {id:3, name:"User2 Ledger"},
 {id:4, name:"User3 Ledger"},
 {id:5, name:"User4 Ledger"},
 {id:6, name:"User5 Ledger"},
 {id:7, name:"User6 Ledger"}
 ];
 ddescribe('Ledger service test', function(){
 var ledgers, httpBackend;
 beforeEach(module('TeamSportApp','ngResource'));

 beforeEach(inject(function ($injector) {
     ledgers = $injector.get("LedgerService");
     httpBackend = $injector.get("$httpBackend");
 }));

 afterEach (function () {
     httpBackend.verifyNoOutstandingExpectation ();
     httpBackend.verifyNoOutstandingRequest ();
 });

 /* ORIGINAL ERROR 
 it('gets a list of ledgers', function() {
     httpBackend.when('/rest/api').respond(ledgerArray);
     var result = ledgers.allLedgers;
     console.log(result);
     expect(result.length).toBe(4);
     //httpBackend.flush();
 });*/

 /* Alle behoben mit angular1.2.14 gemäß [diesem][1] */
     it('gets a list of ledgers', function() {
     httpBackend.expectGET('/rest/api').respond(ledgerArray);
     var result = ledgers.allLedgers();
     httpBackend.flush();
     expect(result.length).toBe(7);
 });

 it('gets a single ledger', function() {
     httpBackend.expectGET('/rest/api/2').respond(singleLedger);
     var result = ledgers.get({id:2});
     httpBackend.flush();
     console.log(result);
     expect(result.name).toBe(singleLedger.name);
 });

});

3voto

Ye Liu Punkte 8896

Versuchen Sie dies:

Dienst:

.factory('LedgerService', function ($resource) {
    var Ledgers =  $resource("/rest/api/:id", { id: '@id'},
        {
            allLedgers : { method: 'GET', isArray: true},
            postTransaction : { method: 'POST'},
            removeTransaction : { method: 'DELETE'}
        });
    return Ledgers;
});

Test:

it('ruft eine Liste von Konten ab', function() {
    httpBackend.expect('/rest/api/').respond(ledgerArray);
    var result = ledgers.allLedgers();
    httpBackend.flush();
    expect(result.length).toBe(7);
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X