2013-09-06 3 views
0

BreezeJS를 엔티티 관리자로 사용하면서 $ httpBackend를 사용하여 스펙 또는 e2e 테스트를 작성한 사람이 있습니까? 여기

는 BreezeJS 코드 :

function getClientsAll() { 
    var query = breeze.EntityQuery.from('clients').using($clientJsonResultsAdapter);   
    return em.executeQuery(query); 
} 

그리고 여기에 사용 재스민 사양에서 테스트 코드입니다 AngularJS와 $ httpBackend :

it('should show all clients', function() { 
    $httpBackend.expectGET(/clients/).respond([ 200, mockData.clients.GET]); 
    backupModelService.getClientsAll() 
     .then(function() { 
      console.log("getClientsAll success"); 
     }) 
     .fail(function() { 
      console.log("getClientsAll fail"); 
     }) 
    $httpBackend.flush();//error thrown here 
}); 

하지만 재스민 검사 오류를 얻을

Error: No pending request to flush ! 

이 브리즈 메서드는 브라우저에서 제대로 작동하지만 테스트 중에는 제대로 작동하지 않습니다. 그러나, angularJS $ http 또는 $ resource를 사용하여 변환하면이 테스트가 통과됩니다. BreezeJS가 사양 및 e2e 테스트를위한 $ httpBackend와 호환되지 않는지 궁금합니다.

어떤 통찰력에도 감사드립니다.

// 편집 --- 때문에 STEVE의 응답

OF AJAX를 조롱하려고하면이 역시 실패합니다.

var success = jasmine.createSpy('success'); 
    var fail = jasmine.createSpy('fail'); 
    spyOn($, 'ajax').andCallFake(function (req) { 
     var d = $.Deferred(); 
     d.resolve(mockData.clients.GET); 
     return d.promise(); 
    }); 
    backupModelService.getClientsAll() 
     .then(success) 
     .fail(fail); 

    expect(success).toHaveBeenCalled(); 

답변

1

Breeze는 XHR을 보내는 데 Angular의 $ http 또는 $ 리소스를 사용하지 않습니다. 그것은 jQuery의 AJAX 구현을 사용합니다. 따라서 em.executeQuery(query)을 사용하여 수행 된 쿼리는 $ httpBackend를 통과하지 않습니다.

Breeze를 사용하여 테스트 할 때 this post에서 설명한대로 jQuery의 $ .ajax를 간첩/스텁/모의해야합니다.

+0

스티브 응답을 주셔서 감사합니다. 나는 아직도 어떤 이유로 전화를 걸기 위해 산들 바람을 피우지 않고있다. 내 답변을 수정하여 제안한 변경 사항을 포함 할 예정입니다. – user2755508

0

사실은 그렇지 않습니다. 바람이 당신이 당신의 테스트

더 많은 정보에 $ httpBackend를 사용할 수 있습니다이 후 아약스 어댑터

function configBreeze($q, $http) { 
    // tell the adapter to use your app module's $http for ajax calls 

    var ajax = breeze.config.initializeAdapterInstance('ajax', 'angular'); 
    ajax.setHttp($http); 
} 

를 설정하는 방법입니다 v.1.4.4 에서 $ HTTP에 대한 아약스 어댑터를 추가 여기 http://www.breezejs.com/documentation/customizing-ajax 여기 Breeze using angular $http interceptor