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"
})
}
我正在测试一个在 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"
})
}