我想在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
@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你看到我的错误了吗?
发布于 2020-03-12 18:59:17
问题是,updateUserField是真正服务中的一个函数,但在模拟中它只是一个属性。以下更改应使其发挥作用:
providers: [{provide: DatabaseService, useValue: {updateUserField: () => of(1) }}]我所做的就是添加() =>,使它成为一个返回of(1)的函数。
https://stackoverflow.com/questions/60660060
复制相似问题