如何在Angular 2+中模拟@select

时间:2018-03-26 16:00:26

标签: angular redux rxjs

在谈论Angular中的测试时,可以在google,stackoverflow等上找到很多方法。我在这里遵循this指令,明确区别于单元测试和集成测试。在没有TestBed的情况下编写单元测试工作非常好,直到我不得不模拟一个@select属性来从redux存储中获取数据。我不能直接将Observable分配给@select属性。有没有办法在不使用TestBed的情况下模拟它?我只想测试我的组件的纯函数,而不是测试商店,服务或其他依赖项。因此,我不使用TestBed而是实例化组件对象本身。

1 个答案:

答案 0 :(得分:1)

这对你来说更有用,但我会将你的@select()移到服务上。这样,您可以在组件测试中模拟整个服务,并使组件与redux存储区域紧密耦合。

例如,而不是:

class MyComponent {
  ...
  @select(someSelector) someString: Observable<string>;
  ...
}

做的:

class MyStoreService {
  ...
  @select(someSelector) someString: Observable<string>;
  ...
}

class MyComponent {
  ...
  constructor(storeService: MyStoreService) {}
  ...
  doSomething(): Observable<string> {
    return this.storeService.someString;
  }
  ...
}