繁体   English   中英

Angular 单元测试,如何将一个主题测试为可观察的

[英]Angular unit test, how to test a subject as observable

我正在尝试测试一个可观察的主题,但它没有按预期工作
为了简单起见,我删除了 getService2Test 订阅中的额外逻辑

下面是我的 function 在职 class

getTest():Observable<string>{
   let subject = new Subject<string>();
   service2.getService2Test().subscribe(result=>{
        subject.next(result.success);   // result.success = "testing"
        subject.complete();
   });
   
   return subject.asObservable();
}

下面是我的测试用例

it('Testing getTest()',()=>{
   spyOn(service2,'getService2Test').and.returnValue(of("success"));
   service.getTest().subscribe((result)=>{
        expect(result).toEqual("testing");        // never gets invoked in testing
        console.log("Output result: "+result);    // not able to see any message
   });
});

subscribe 中的代码从未执行过。 我还收到一条警告消息“...没有期望。”

您的测试用例不会等待您的订阅并立即完成。 要解决此问题,请像这样实现解析回调:

it('Testing getTest()', done => {
   spyOn(service2,'getService2Test').and.returnValue(of("success"));
   service.getTest().subscribe((result)=>{
        // verify results
        done();
   });
});

笑话文档

谢谢 Felix,我已经测试过并且下面的代码有效

it('Testing getTest()', done => {
   spyOn(service2,'getService2Test').and.returnValue(of("success").pipe(delay(0)));
   service.getTest().subscribe((result)=>{
        console.log(result);   // Prints my results
        done();
   });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM