首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NgXs selectSnapshot在单元测试中不起作用

NgXs selectSnapshot在单元测试中不起作用
EN

Stack Overflow用户
提问于 2020-06-03 15:33:41
回答 1查看 135关注 0票数 0

这非常清楚地描述了如何使用NgXs https://www.ngxs.io/recipes/unit-testing编写单元测试

为了模仿,我编写了一个带有SetLocale操作的状态:

代码语言:javascript
复制
export class SetLocale {
  static readonly type = '[Internationalization] SetLocale';
  constructor(public value: string) { }
}

export class InternationalizationStateModel {
  locale: string;
}

@State<InternationalizationStateModel>({
  name: 'internationalization',
  defaults: {
    locale: null
  }
})
@Injectable({
  providedIn: 'root'
})
export class InternationalizationState {

  @Selector()
  static getLocale(state: InternationalizationStateModel): string {
    return state.locale;
  }

  @Action(SetLocale)
  setLocale(ctx: StateContext<InternationalizationStateModel>, { value }: SetLocale) {
    ctx.setState(
      patch({
        locale: value
      })
    );
  }
}

这并没有什么特别之处,在代码中使用时可以很好地工作。接下来,添加了一个单元测试:

代码语言:javascript
复制
  let store: Store;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [NgxsModule.forRoot([InternationalizationState])],
    });
    store = TestBed.inject(Store);
  });

  it('should process locale', () => {
    store.dispatch(new SetLocale('xx-XX'));
    const locale = store.selectSnapshot(s => s.locale);
    expect(locale).toBe('xx-XX');
  });

据我所知,这正是指南的建议,但由于语言环境未定义,此测试失败。

为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-04 11:49:41

看起来您只是缺少要创建快照的状态的名称:

尝试:store.selectSnapshot(s => s.internationalization.locale)

或者使用选择器store.selectSnapshot(InternationalizationState.getLocale)

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

https://stackoverflow.com/questions/62167513

复制
相关文章

相似问题

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