2016-12-23 6 views
0

私はカルマを使ってMEANアプリケーションをテストしていますが、AngularJS(ng-mock)の$ httpBackend 'expectPOST'メソッドから空の配列を返すことができません。カルマを使用したHTTPポストリクエストから空の配列レスポンスをシミュレート

this.getIds = function(path, callback) { 
    // console.log('Sending request to get IDs to the path: ' + path); 
    $http.post('/dropbox/getIds', {path: path}).success(function(items) { 
     if(items.error !== undefined) { 
     console.log(items.error); 
     callback('Error with Dropbox API files list request'); // Do not alter string 
     return; 
     } 
     var empty = (items.length === 0) ? true : false; 
     callback(items, empty); 
    }).error(function(err) { 
     console.log(err); 
     callback('Error making ID request'); 
    }); 
    }; 

そしてここでは、ユニットテストコードスニペットです:

it('should request Dropbox file IDs at a give path - no errors but empty response', function() { 
    $httpBackend.expectPOST("/dropbox/getIds").respond({ data: [] }); 
    dropboxService.getIds('path', function(items, empty) { 
    expect(items).to.deep.equal({data: []}); 
    expect(empty).to.deep.equal(true); 
    }); 
}); 

「空」変数はHTTPとしてこのテストでは真でなければなりません。ここ

は、私がテストしていたサービスメソッドでありますPOST応答は空の 'data'配列ですが、 'empty'変数が実際にはfalseであるため、テストは失敗します。

誰かが、私が間違って行ったことを、テストコードか、おそらくサービスメソッド自体に表示できますか?

答えて

0

編集:

角度のドキュメント(https://docs.angularjs.org/api/ng/service/ $ HTTP)によると、あなたはコールバックの戻り値を処理している方法が間違っています。あなたのテストでは、アイテムは、私はあなたの三元は、あなたが

expect(items.data).to.deep.equal({data: []}); 

不正な最初の投稿にあなたの最初のアサーションを変更する必要が続いて

var empty = (items.data.data.length === 0) ? true : false; 

ようになっているはずだと思い

{ 
    data: { data: [] } } 
} 

になります:

あなたはあなたのダイジェストを呼び出す必要があります解決すべき約束の範囲。

let scope; 
beforeEach(() => { 
    inject($rootScope => { 
    scope = $rootScope.$new(); 
    }); 
}); 

it('should request Dropbox file IDs at a give path - no errors but empty response', function(done) { 
    $httpBackend.expectPOST("/dropbox/getIds").respond({data: []}); 
    dropboxService.getIds('path', function(items, empty) { 
    expect(items.data).to.deep.equal({data: []}); 
    expect(empty).to.deep.equal(true); 
    done(); 
    }); 
    scope.$digest(); 
}); 
+0

これは機能しませんし、問題を解決しません。私はコールバックを持っている他のテストがあり、私のテストは正常に動作します。問題は、コールバックを解決するのではなく空の配列をシミュレートすることです。完全な配列が返され、証明が必要な場合は、これらのメソッドが動作するこのメソッドの他のテストがあります。 – LJH

+0

申し訳ありません新しい回答が動作するかどうかを確認してください。 – ppham27

関連する問題