0

BreezeJS をエンティティ マネージャーとして機能させながら、$httpBackend を使用して仕様または e2e テストを構築できた人はいますか?

BreezeJS コードは次のとおりです。

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

AngularJS $httpBackend を使用した Jasmine 仕様のテスト コードは次のとおりです。

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 と互換性がないかどうか疑問に思っています。

洞察をありがとう。

//編集 --- スティーブの応答のために 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();
4

2 に答える 2

0

それは完全に真実ではありません。Breeze は v.1.4.4 で $http 用の ajax アダプターを追加しました。これは ajax アダプターをセットアップする方法です。

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

この後、テストで $httpBackend を使用できるようになります

詳細はこちら http://www.breezejs.com/documentation/customizing-ajax およびこちら Breeze using angular $http インターセプター

于 2014-02-05T13:59:10.873 に答える