在 Karma 单元测试中模拟导入选择器的值

Posted

技术标签:

【中文标题】在 Karma 单元测试中模拟导入选择器的值【英文标题】:Mocking the value of an imported selector in Karma unit tests 【发布时间】:2021-04-24 08:23:34 【问题描述】:

目前正在尝试使用 Karma 在我的单元测试中模拟选择器值。我试图模拟的代码如下:

Constructor(private store: Store<IAppState> 
    this.isFound$ = this.store.pipe(select(selectIsFound),filter(isFound => isFound != undefined))

我需要一些可以让我模拟出 selectIsFound 值而不是模拟出 isFound 可观察对象的东西,以便可以测试过滤器并提高代码覆盖率。如果没有过滤器运算符的其他解决方案也会有所帮助。

我目前正在直接使用以下方法模拟可观察值:

component.isFound = of(true)

但我需要一些能触发过滤器的东西,这样它才能得到覆盖。 任何帮助将不胜感激。

【问题讨论】:

请提供一个最小的、完整的代码。有些变量我们不知道它们来自哪里 【参考方案1】:

很遗憾,component.isFound = of(true) 还不够。 您需要遵循ngrx 测试指南并提供模拟选择器:https://ngrx.io/guide/store/testing#using-mock-selectors

  beforeEach(() => 
    TestBed.configureTestingModule(
      // ...
      providers: [
        // ...
        provideMockStore( initialState ),
      ],
    );

    // setting the selected value.
    TestBed.get(Store).overrideSelector(selectIsFound, true);
  );

【讨论】:

以上是关于在 Karma 单元测试中模拟导入选择器的值的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs 基于karma和jasmine的单元测试

将 Angular 单元测试报告导入 Sonarqube

前端js单元测试 使用mochachaisinon,karma

在vue-cli生成的项目中使用karma+chrome进行单元测试

在 karma 中使用“tsify”启用“对装饰器的实验性支持”

.Karma+Jasmine+karma-coverage