如何在Jasmine测试中处理订阅/可观察?

如何在Jasmine测试中处理订阅/可观察?,jasmine,rxjs,observable,Jasmine,Rxjs,Observable,我正在尝试倾听驻留在共享函数中的可观察的的变化,我将使用该函数测试多个类似项 我应该在哪里初始化订阅,以使其可用于每个it()块 这是我一直在测试的代码的摘录: describe('some test', () => { // service is an external service injected earlier const contrast = () => service.contrast$; sharedTest('contrast', contrast);

我正在尝试倾听驻留在共享函数中的
可观察的
的变化,我将使用该函数测试多个类似项

我应该在哪里初始化
订阅
,以使其可用于每个
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);
      });
    });
  }
});
description('sometest',()=>{
//服务是早期注入的外部服务
常量对比=()=>service.contrast$;
共享测试(“对比度”,对比度);
函数sharedTest(statePropName:string,observableInstance:any):void{
描述(${statePropName}$observable`,()=>{
让serviceProp:主体;
让计数:数字=0;
let值:any=null;
在每个之前(()=>{
serviceProp=observateInstance();
});
//serviceProp尚未定义
serviceProp.subscribe(res=>{
计数++;
值=res;
});
它('应流式传输初始默认值',()=>{
期望(计数)。toBe(0);
expect(value).toBe(null);
});
它('在发出一个后应流式传输正确的值',()=>{
//serviceProp订阅在此不起作用
serviceProp.emit(50);
期望值(计数)。toBe(1);
期望值(value),toBe(50);
});
});
}
});
我还尝试在
beforeAll()中初始化订阅,但也不起作用

有没有关于如何正确解决这个问题的建议?谢谢

  • 测试用例之间的依赖关系。测试用例所在的测试套件 相互依赖是脆弱而复杂的。执行令 不应被推定。初始测试用例的基本重构 或UUT的结构导致越来越普遍的 相关测试中的影响

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


我只能说这是个糟糕的想法,你无法控制jasmine处理测试的方式,订阅是异步的。每个测试都应该是独立的,因此您应该在每个测试之前或在每个测试开始时手动从预定义的状态开始。我不知道可怕的想法是使用
sharedTest()
来测试多个函数,还是在
sharedTest()内部执行测试的方式。你能详细说明一下吗?感谢IT测试应该是独立的。@JuliaPassynkova您有任何参考资料,他们建议避免这种方法吗?我在这里读到了关于避免代码重复的内容。。。你怎么看?每个测试都会影响到另一个测试,这不是一个好的实践,它实际上和编码一样,编写代码时不会干扰到另一个代码。但是如果你想这样做,没有什么可以阻止你这样做,只是让调试变得更复杂了。谢谢你的反馈,但是(A)这不是我帖子问题的答案,所以我宁愿把它作为我评论的答案。(B) 我不认为所有的测试都是相互依赖的。它们只依赖于一个外部函数,而不是测试本身。无论如何,你可能是对的,我只是不认为这两个案例适合我上面的例子。对不起,我没有理解你。在这种情况下,您可以将函数移到文件中descripe块的外部。它将可用于所有it部门,并描述其功能。