[英]angular TestBed mock service
我想在 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
你看到我的錯誤了嗎?
問題是 updateUserField 是您實際服務中的一個函數,但在您的模擬中它只是一個屬性。 以下更改應使其工作:
providers: [{provide: DatabaseService, useValue: {updateUserField: () => of(1) }}]
我所做的只是添加了() =>
,以便它成為一個返回您的of(1)
的函數
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.