2014-04-04 2 views
3

$ resource-wrapping 서비스에 대한 간단한 단위 테스트가 있습니다. 나는 7 가지 항목의 배열을 반환하도록 httpBackend를 조롱하고 설정했습니다. 내가 테스트를 실행하면, 4 개 항목이 반환되었음을 없습니다 7보고 :httpBackend를 사용한 재스민 테스트가 예상 결과를 반환하지 않습니다.

기능 (A1, A3, A2를, A4) {...}

로 4 예상 7.

다음은 내 서비스 내 사양입니다

=== 서비스 ===

/* 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; 
}) 

}) 

=== 사양 ===

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(); 
});*/ 

/* All fixed using angular1.2.14 per [this][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); 
}); 

});

+1

사용'httpBackend.expectGET() 대신 .when'의') (응답 ()'...와'.flush()'가 예상 결과 앞에 나타난다. – doodeec

+0

왜'httpBackend.flush();'가 주석 처리되고'expect (result.length) .toBe (4); . 오류가 발생했을 때 '7'이라고 생각합니다. – glepretre

+0

나는 당신의 추천을 시도했다; 이전 오류와 같은 오류 : {오류 : 만족하지 못하는 요청 :/사용자/phaggood/Desktop/Dropbox/Project/Current/Incubator/mobileapps/dreamfactory/teamsport/test/js/angular-mocks의 GET/rest/api. js (줄 1488) } flush() 주석 처리에서 "오류 : 플러시 요청이 없습니다." –

답변

3

이 시도 :

서비스 :

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

시험 :.

it('gets a list of ledgers', function() { 
    httpBackend.expect('/rest/api/').respond(ledgerArray); 
    var result = ledgers.allLedgers(); 
    httpBackend.flush(); 
    expect(result.length).toBe(7); 
}); 
+0

오류 : 예기치 않은 요청 : GET/rest/api \t 예상/나머지/api/정의되지 않음 –

+0

공장에서 {id : 'id'}을 제거하면 작동하는 것처럼 보입니다. 이제는 원장을 사용할 수 없게되었습니다. 쿼리 및 단일 인스턴스 가져 오기 - Ledgers.allLedgers() 및 Ledgers.get (someId) –

+0

모든 테스트가 작동합니다. 위의 수정 사항 참조 - Liu의 대답을 약간 수정해야했습니다. –