使用茉莉花角单元测试过滤谓词功能

问题描述 投票:0回答:1

我有一个过滤谓词功能,用于过滤角度的mat-table

this.dataSource.filterPredicate = this.myService.tableFilter();

tableFilter(): (data: any, filter: string) => boolean {
    let filterFunction = function (data, filter): boolean {
      let filterValues = JSON.parse(filter);
      ... my logic ...
    };
    return filterFunction;
  }
}

我想编写一个单元测试来测试此过滤器谓词功能

it('filter table', inject(
    [MyService],
    (service: MyService) => {

      // how to do this?
      let messageObject = service.tableFilter(dummyData, 
        getDummyFilterValues());
    }
  ));

如何在单元测试中调用service.tableFilter函数?

angular jasmine karma-jasmine angular-material2
1个回答
0
投票

在您的情况下,将以下代码中我返回对象的逻辑替换为布尔返回值。我认为问题在于如何调用返回的函数

打字稿代码

tableFilter(): (data: any, filter: string) => any {
    const filterFunction = (data, filter) => {
      const filterValues = JSON.parse(filter);
      return data.find(d => {
        return d.num === filterValues.num;
      });
    };
    return filterFunction;
  }

规格文件/单元测试块

  it('test filterfx', () => {
    const fixture = TestBed.createComponent(AppComponent);
    const app = fixture.debugElement.componentInstance;
    const filterfx =  app.tableFilter();
    expect(filterfx(app.data,  JSON.stringify({ num: 'one' })).num).toEqual('one');
  });
© www.soinside.com 2019 - 2024. All rights reserved.