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

我已经单独测试了过滤器本身,所以知道它正在工作,并且 karma 告诉我它在报告上述断言失败时正在转换数据。

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 回答
1

由于您知道模拟响应是什么并且您也知道过滤器是什么,因此您知道如果过滤器正常工作,过滤器将返回多少行。您只需要在过滤器完成后断言已解析的集合包含确切的项目和计数。如果过滤器正常工作,则此数据将匹配。

于 2015-08-13T03:53:47.043 回答