1

クライアント上のデータと対話し、サーバーを呼び出さないいくつかの非同期メソッドを実行する必要があるコントローラーがあります。ブラウザーで正常に動作するメソッドが 1 つありますが、メソッドをテストで駆動したいのですが、テスト環境 (カルマとモカ) で動作させることができません。その理由は、Promise が解決されないため、$resource.query() が返す空の配列がテスト環境に入力されないためです。これがテスト スイートの beforeEach です。

    beforeEach(inject(function($rootScope, $controller, scheduleService){
    scope = $rootScope.$new();
    sc = $controller('scheduleCtrl', {
        $scope: scope, service: scheduleService
    });
    scope.$apply();
    }));

scheduleCtrl には、そのコンストラクターで Resource.query() の結果に割り当てられるプロパティ schedule があります。返された 3 つのオブジェクトが MockHttpExpectation に読み込まれていることがわかります。

ここに画像の説明を入力

しかし、テストを実行すると、sc.schedule はまだ空の配列であるため、テストは失敗します。テストで Resource.query() を解決するにはどうすればよいですか?

4

1 に答える 1

0

Resource.query() は、非同期プロセスであるプロミスで動作します。

非同期リクエストが完了する前、および配列が設定される前に、テストが実行されることがあります。

$httpBackend を使用すると、$httpBackend.flush() の後に expect を呼び出すことができます。

または、テストで Resource.query().$promisse から返された $promisse を取得し、その実装内で期待を行うことができます。

元:

$scope.promisse = Resource.query().$promisse;

sc.promisse(function(values) {
  expect(values.length).not.toBe(0);
});
于 2015-01-07T16:01:07.800 に答える