首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角TestBed模拟服务

角TestBed模拟服务
EN

Stack Overflow用户
提问于 2020-03-12 18:37:17
回答 1查看 44关注 0票数 0

我想在NGXS中测试一个动作,但由于我需要模拟的服务而失败了。在谷歌上搜索发现,有多种方法来模拟服务。

测试

代码语言:javascript
复制
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

代码语言:javascript
复制
  @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
                    });
                })
            );
    }

误差

代码语言:javascript
复制
this.databaseService.updateUserField is not a function

你看到我的错误了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-12 18:59:17

问题是,updateUserField是真正服务中的一个函数,但在模拟中它只是一个属性。以下更改应使其发挥作用:

代码语言:javascript
复制
providers: [{provide: DatabaseService, useValue: {updateUserField: () => of(1) }}]

我所做的就是添加() =>,使它成为一个返回of(1)的函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60660060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档