如何在Jasmine测试中处理Subscription / Observable?

时间:2017-04-20 09:05:56

标签: jasmine rxjs observable

我正在尝试收听位于共享函数中的observable的更改,我会用它来测试多个类似的项目。

我应该在哪里初始化subscription,以便将其提供给每个it()块?

这是我一直在测试的代码的摘录:

describe('some test', () => {
  // service is an external service injected earlier
  const contrast = () => service.contrast$;
  sharedTest('contrast', contrast);

  function sharedTest(statePropName: string, observableInstance: any): void {
    describe(`${statePropName}$ observable`, () => {
      let serviceProp: Subject<any>;
      let count: number = 0;
      let value: any = null;

      beforeEach(() => {
        serviceProp = observableInstance();
      });

      // serviceProp is not defined yet
      serviceProp.subscribe(res => {
        count++;
        value = res;
      });

      it('should stream the initial default value', () => {
        expect(count).toBe(0);
        expect(value).toBe(null);
      });

      it('should stream the correct value after emitting one', () => {
        // serviceProp subscription is not working here
        serviceProp.emit(50);
        expect(count).toBe(1);
        expect(value).toBe(50);
      });
    });
  }
});

我还尝试在beforeAll()内初始化订阅,但也没有。

有关如何正确解决此问题的任何建议?感谢

1 个答案:

答案 0 :(得分:0)

Practices to avoid, or "anti-patterns" (wiki)

  • 测试用例之间的依赖关系。测试用例的测试套件 相互依赖是脆弱和复杂的。执行顺序 不应该推测。初始测试用例的基本重构 UUT或UUT的结构导致螺旋式越来越普遍 对相关测试的影响。

  • 相互依赖的测试。相互依赖的测试可能导致级联错误 底片。早期测试案例的失败打破了后来的测试案例 即使UUT中不存在实际故障,也增加了缺陷分析 和调试工作。*