Angular 单元测试,如何将一个主题测试为可观察的
Angular unit test, how to test a subject as observable
我正在尝试测试一个可观察的对象,但它没有按预期工作
为了简单起见,我删除了 getService2Test subscribe
中的额外逻辑
下面是我在服务中的功能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();
});
});
我正在尝试测试一个可观察的对象,但它没有按预期工作
为了简单起见,我删除了 getService2Test subscribe
下面是我在服务中的功能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();
});
});