标签: ngrx-data

如何在 @ngrx/data 中对 EntityCollectionServiceBase 进行单元测试?

我有一个虚拟服务:

export class PatientService extends EntityCollectionServiceBase<Patient> {
  constructor(serviceElementsFactory: EntityCollectionServiceElementsFactory) {
    super('Patient', serviceElementsFactory);
  }
}
Run Code Online (Sandbox Code Playgroud)

我有以下测试:

describe('PatientService', () => {
  let service: PatientService;

  beforeEach(() => {
    TestBed.configureTestingModule({});
    service = TestBed.inject(PatientService);
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
});
Run Code Online (Sandbox Code Playgroud)

它给了我:

NullInjectorError: No provider for EntityCollectionServiceElementsFactory

所以我更新如下:

describe('PatientService', () => {
  let service: PatientService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [EntityDataModuleWithoutEffects.forRoot(entityConfig)],
      providers: [provideMockStore()],
    });
    service = TestBed.inject(PatientService);
  });

  it('should be created', () => {
    expect(service).toBeTruthy();
  });
});
Run Code Online (Sandbox Code Playgroud)

但现在它给了我:

NullInjectorError: No provider for …

unit-testing ngrx angular ngrx-data

10
推荐指数
1
解决办法
3415
查看次数

我们可以将 NgRx 数据与分页样式的 REST API 响应一起使用吗?

我目前正在使用 NgRx Data 对我的项目中的几个实体执行 CRUD 操作。现在,我必须开发分页。因此,REST API 响应将类似于:

{
    "page": 1,
    "per_page": 10,
    "total": 100,
    "total_page": 10,
    "data": [
        { ... },
        { ... },
        { ... }
    ]
}
Run Code Online (Sandbox Code Playgroud)

AFAIK,NgRx 数据适用于实体,我不知道如何处理这个问题。你能把我重定向到一些光吗?谢谢你。

ngrx angular-ngrx-data ngrx-data

5
推荐指数
1
解决办法
1323
查看次数

如何在 @ngrx/data 中扩展自定义实体集合缩减器

在阅读并尝试了迄今为止的所有内容以将我的additionalCollectionStates更新到我的EntityCollection(基于文档中的一些信息,这个SO问题另一个SO问题另一个SO问题github存储库中的一个问题)之后,我发现自己陷入了困境应该是一个相当常见的任务,并且在使用 ngrx 之前根本没有问题:使用 ngrx 对存储的实体集合进行排序。搜索解决方案让我回到我已经看过 5 次的 10 个链接,大多数示例要么太基础,要么过时,要么根本不使用 ngrx/data,或者类似的问题根本没有答案。

环境:Angular 9.1.7、ngrx 9.1.2、macOS 10.14.6

目标

按照排序和分页文档中的描述,将自己添加并更新additionalCollectionState到我的 EntityCollection 。我没有从服务器获取sortQuery属性(sortField、sortDirection),而是在 GUI 中设置它并根据它们对集合进行排序。我知道 EntityMetadataMap 上存在设置,但它对我来说不够灵活,我想动态地对应用程序中不同 MatTable 中的集合进行排序。只要 MatTable 中的排序顺序/字段发生更改,就应该更新此附加属性。sortComparer

到目前为止我所取得的成就:

如上所述,additionalCollectionState 的 ngrx/data 方式有效我的集合是用我在 EntityMetadataMap 中提供的数据初始化的。然而,更新自定义集合属性并不像我从文档中理解的那样工作。由于我没有从服务器获取sortQuery属性,因此不会调用 ResultsHandler。

我通过两种方式解决了这个问题:a)使用 ngrx 和 ngrx/entity 方法,b)通过尝试扩展自定义EntityCollectionReducer的 ngrx/data 方式

a) 我成功创建了自定义 Action 和自定义Reducer 并更新了状态属性,但没有更新之前定义的集合属性。我的行动基本上是:

export const selectResourceSortQuery = createAction('[Resource] Get …
Run Code Online (Sandbox Code Playgroud)

angular ngrx-entity angular-ngrx-data ngrx-data

3
推荐指数
1
解决办法
3205
查看次数