ngxs:如何测试动态选择器
ngxs: How to test dynamic selectors
我遵循了关于测试 ngxs 选择器的官方文档 (https://ngxs.gitbook.io/ngxs/recipes/unit-testing#testing-selectors),但是它没有涵盖如何对使用 createSelector
.
创建的动态选择器进行单元测试
我的普通选择器只是获取状态作为参数,因此我可以通过传递准备好的状态并比较输出来轻松测试它。
@Selector()
static nachweise(state: NachweisStateModel) {
return state.nachweise;
}
//Setup state
const state = {...};
//Compare expectations
expect(NachweisState.nachweise(state)).toEqual(...);
我的动态选择器如下所示:
@Selector()
static nachweisById(id: string) {
return createSelector([NachweisState], state => {
return state.nachweise.find(nachweis => nachweis.id === id);
});
}
它获取的唯一参数是它选择的 id,而不是状态。通过将状态指定为 createSelector
的第一个参数,状态自动传入,我不知道应该如何测试这个选择器。
好像是the documentation has been updated:
it('should select requested animal names from state', () => {
const zooState = {
animals: [
{ type: 'zebra', name: 'Andy'},
{ type: 'panda', name: 'Betty'},
{ type: 'zebra', name: 'Crystal'},
{ type: 'panda', name: 'Donny'},
]
};
const value = ZooSelectors.animalNames('zebra')(zooState);
expect(value).toEqual(['Andy', 'Crystal']);
});
我遵循了关于测试 ngxs 选择器的官方文档 (https://ngxs.gitbook.io/ngxs/recipes/unit-testing#testing-selectors),但是它没有涵盖如何对使用 createSelector
.
我的普通选择器只是获取状态作为参数,因此我可以通过传递准备好的状态并比较输出来轻松测试它。
@Selector()
static nachweise(state: NachweisStateModel) {
return state.nachweise;
}
//Setup state
const state = {...};
//Compare expectations
expect(NachweisState.nachweise(state)).toEqual(...);
我的动态选择器如下所示:
@Selector()
static nachweisById(id: string) {
return createSelector([NachweisState], state => {
return state.nachweise.find(nachweis => nachweis.id === id);
});
}
它获取的唯一参数是它选择的 id,而不是状态。通过将状态指定为 createSelector
的第一个参数,状态自动传入,我不知道应该如何测试这个选择器。
好像是the documentation has been updated:
it('should select requested animal names from state', () => {
const zooState = {
animals: [
{ type: 'zebra', name: 'Andy'},
{ type: 'panda', name: 'Betty'},
{ type: 'zebra', name: 'Crystal'},
{ type: 'panda', name: 'Donny'},
]
};
const value = ZooSelectors.animalNames('zebra')(zooState);
expect(value).toEqual(['Andy', 'Crystal']);
});