2

プロミスが返された後にフィルターが呼び出されたと主張するのに苦労しています。

このコードはコントローラから呼び出され、コントローラはデータを取得して http GET サービスからフィルタリングします。

getPermissions(){
    return this.DataService.getPermissionsLOV().then((data) => {
        return this.$filter('chunkCollection')(data, 3);
    });
}

私のテストケースは次のようになります。

it('should get the permissions', () => {
    spyOn(service, 'getPermissions').and.callThrough();
    spyOn(DataService, 'getPermissionsLOV').and.callFake(function(){
        var defer = this.$q.defer();
        defer.resolve(mockData);
        return defer.promise;
    });

    let resp;

    service.getPermissions().then((data) => {
        resp = data;
    });

    scope.$digest();

    expect(service.getPermissions).toHaveBeenCalled();
    expect(DataService.getPermissionsLOV).toHaveBeenCalled();
    expect(resp).toEqual(mockData);

});

expect(resp).toEqual(mockData);応答がフィルタリングされるため、アサーションは失敗しますが、chunkCollectionこの呼び出しをテストする方法がわかりません$filter?

フィルター自体を個別にテストしたので、それが機能していることがわかります。カルマは、前述のアサーションの失敗を報告するときに、データを変換していることを示しています。

4

2 に答える 2

5

あなたの質問は、実際にフィルターをモックする方法だと思います。beforeEachテストの前にフィルターを追加して提供するだけです。

var mockChunkCollectionFilter = jasmine.createSpy('chunkCollectionFilter');
beforeEach(module(function($provide) {
  $provide.value('chunkCollectionFilter', mockChunkCollectionFilter);
}));

it('should get the permissions', () => {
    spyOn(service, 'getPermissions').and.callThrough();
    spyOn(DataService, 'getPermissionsLOV').and.callFake(function(){
        var defer = this.$q.defer();
        defer.resolve(mockData);
        return defer.promise;
    });
    mockChunkCollectionFilter.and.callFake(function (data, chunks) {
      // Ignore chunks since that's what the test expects.
      return data;
    });

    let resp;

    service.getPermissions().then((data) => {
        resp = data;
    });

    scope.$digest();

    expect(service.getPermissions).toHaveBeenCalled();
    expect(mockChunkCollectionFilter).toHaveBeenCalled();
    expect(DataService.getPermissionsLOV).toHaveBeenCalled();
    expect(resp).toEqual(mockData);

});

mockChunkCollectionFilter他のスパイと同じように機能します。

于 2015-08-13T03:56:58.537 に答える