Angular 错误::无法为Foo()找到要监视的对象

Angular 错误::无法为Foo()找到要监视的对象,angular,unit-testing,jasmine,karma-jasmine,Angular,Unit Testing,Jasmine,Karma Jasmine,我试图在我的忠诚服务中创建一个简单的Foo方法 public Foo(): Observable<string> { return of('1'); } 但是得到错误: 错误::无法为Foo()找到要监视的对象。 我尝试了TestBed.inject方法和injector.get方法。当我们使用SpyOn在AngularJS和stub-promises中编写测试时,我们做了如下操作: spyOn(someService,'get')。和.returnValue(

我试图在我的忠诚服务中创建一个简单的Foo方法

    public Foo(): Observable<string> {
    return of('1');
  }
但是得到错误: 错误::无法为Foo()找到要监视的对象。
我尝试了TestBed.inject方法和injector.get方法。

当我们使用
SpyOn在
AngularJS
stub-promises
中编写测试时,我们做了如下操作:

spyOn(someService,'get')。和.returnValue(deferred.promise);
上面的代码是完全有效的-与
可观察的
不同,
承诺总是异步的。但是如何测试
可观测值
? 使用茉莉花大理石是这里最好的选择。因此,请尝试以下方法:

应用程序foo.component.ts

@组件({
选择器:“app foo”,
模板:`
{{foo | async}}
`
})
导出类FooComponent实现OnInit{
foo:string=“”;
构造函数(私有fooService:fooService){}
恩戈尼尼特(){
this.fooService.get().subscribe(res=>{
this.foo=res;
});
}
}
app foo.component.spec.ts

从“茉莉花弹珠”导入{cold,getTestScheduler};
常量fooServiceStub={
得到(){
const foo$=cold('-x |',{x:`1`});
返回foo$
}
};
描述('FooComponent',()=>{
它('应该工作',()=>{
const foo=element.querySelectorAll('.foo');
getTestScheduler().flush();//刷新观察值
fixture.detectChanges();
expect(element.queryselectoral('.foo').length).toEqual(1);
});
});
有关
可观测性的更多信息,请参阅以下文章:


你到底想达到什么目的?目前,您似乎正在尝试在您尝试测试的服务中存根一个方法,这通常不是一个好主意。您可以在服务内测试可观察的对象。但是,您需要提供更多关于您的服务结构的内部信息,以及您希望通过测试最终实现的目标
  //const loyaltyService: LoyaltyService = TestBed.inject(LoyaltyService);
  const loyaltyService: LoyaltyService = fixture.debugElement.injector.get(LoyaltyService);
  spyOn(loyaltyService, 'test').and.returnValue(of('1'));