Jasmine 测试订阅可从 OnInit 观察到的服务级别 Angular

Jasmine Testing Subscription To Service Level Observable From OnInit Angular

我正在测试一个在 ngOnInit 方法中有订阅的组件。在 "the wild" 中 运行 时工作正常,但测试失败,因为没有可用的订阅对象。我已经尝试创建一个存根 svc 来在我的单元测试中构建可观察对象,但无法让它工作。

这是我的服务和组件代码 (abrv):

组件

  ngOnInit() {
   this.userSvc.user.subscribe(user => {
    this.currentUser = user; //-- this.userSvc.user (which is an observable on that class) is available in the wild, but not when testing
   })
  }

用户服务

  //-- User Subscribe items
  userSubject: BehaviorSubject<any> = new BehaviorSubject(null);
  user = this.userSubject.asObservable(); // this is the property I'm subscribing to which gets set after login.

这是我的测试设置

//SvcStub
const usrSvcStub = {
 user : {
  FirstName: "Test",
  LastName: "User",
  Username: "testuser"
 }
}

//Providers Config
 providers: [
    {provide: UserService, useValue: {usrSvcStub}}
   ]

当测试启动时,我可以通过调试看到它正在加载我的 "StubSvc" 但用户未定义,我无法订阅它。有人能指出我正确的方向吗?下面的屏幕截图显示了它何时加载组件的 ngOnInit 函数并订阅可观察到的服务。

你能试试吗

const usrSvcStub = {
 user : new BehaviorSubject<any>({
  FirstName: "Test",
  LastName: "User",
  Username: "testuser"
 })
}