【发布时间】:2018-08-23 14:08:50
【问题描述】:
在组件中,我们使用 ngrx 选择器来检索状态的不同部分。
public isListLoading$ = this.store.select(fromStore.getLoading);
public users$ = this.store.select(fromStore.getUsers);
fromStore.method 是使用 ngrx createSelector 方法创建的。例如:
export const getState = createFeatureSelector<UsersState>('users');
export const getLoading = createSelector(
getState,
(state: UsersState) => state.loading
);
我在模板中使用了这些 observables:
<div class="loader" *ngIf="isLoading$ | async"></div>
<ul class="userList">
<li class="userItem" *ngFor="let user of $users | async">{{user.name}}</li>
</div>
我想写一个测试,我可以这样做:
store.select.and.returnValue(someSubject)
能够更改主题值并根据这些值测试组件的模板。
事实上,我们很难找到合适的方法来测试它。如何编写我的“andReturn”方法,因为select 方法在我的组件中被调用了两次,两个不同的方法(MemoizedSelector)作为参数?
我们不想使用真正的选择器,所以模拟一个状态然后使用真正的选择器似乎不是一种合适的单元测试方式(测试不会被隔离,而是使用真正的方法来测试组件的行为)。
【问题讨论】:
-
一个问题,'returnValue'来自茉莉花,对吧?我面临的另一个问题是,当我在 store.select 中使用选择器功能时。茉莉的间谍解决方案不起作用。但是如果我直接使用 store.select('somefield') ,它可以工作。你有类似的问题吗?
-
@ChrisBao 目前我正面临同样的问题。如果你能解决这个问题,你能分享一下吗?特别是对于状态选择器。