【发布时间】:2020-06-24 20:31:54
【问题描述】:
我想在 NGXS 中测试一个动作,但由于我需要模拟的服务而失败。谷歌搜索发现有多种方法可以模拟服务。
测试
describe('UserState', () => {
let store: Store;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
NgxsModule.forRoot([UserState]),
HttpClientModule,
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule,
AngularFireAuthModule
],
providers: [{provide: DatabaseService, useValue: {updateUserField: of(1)}}]
});
store = TestBed.get(Store);
});
it('should update user settings', () => {
store.dispatch(new UpdateUserSettingsAction({alias: 'Naruto'} as Settings));
const userModel: UserModel = store.selectSnapshot(state => state.user);
expect(userModel.settings).toBeDefined();
});
});
动作
@Action(UpdateUserSettingsAction)
updateUserSettings(ctx: StateContext<UserModel>, action: UpdateUserSettingsAction) {
const user = ctx.getState();
return this.databaseService.updateUserField('settings', action.settings)
.pipe(
first(),
tap(() => {
ctx.setState({
...user,
settings: action.settings
});
})
);
}
错误
this.databaseService.updateUserField is not a function
你看到我的错误了吗?
【问题讨论】: