如何在测试angular2组件时模拟可观察流?
我正在为angular2组件编写测试用例 我创建了一个使用可观察流的服务,如下所示:如何在测试angular2组件时模拟可观察流?,angular,jasmine,angular2-testing,angular2-observables,Angular,Jasmine,Angular2 Testing,Angular2 Observables,我正在为angular2组件编写测试用例 我创建了一个使用可观察流的服务,如下所示: import {Injectable} from '@angular/core' import {Subject} from 'rxjs/Subject'; import {User} from './user.model'; @Injectable() export class UserService { selectedUserInstance:User = new User();
import {Injectable} from '@angular/core'
import {Subject} from 'rxjs/Subject';
import {User} from './user.model';
@Injectable()
export class UserService {
selectedUserInstance:User = new User();
// Observable selectedUser source
private selectedUserSource = new Subject<User>();
// Observable selectColumn stream
selectedUser$ = this.selectedUserSource.asObservable();
// service command
selectUser(user:User) {
this.selectedUserInstance=user;
this.selectedUserSource.next(user);
}
}
现在在我的spec.ts文件中,我想将此流模拟为:
getSelectedUser() {
this.subscriptionUser = this.userService.selectedUser$.subscribe(
selectedUser => {
this.selectedUser = selectedUser;
}
);
}
spyOn(userService, 'selectedUser$')
.and.returnValue(Observable.of({
'name': 'bhushan',
'desc': 'student'
}));
但它总是给我以下错误:
错误:spyOn无法为selectColumn$()找到要监视的对象
有没有办法做到这一点
我在这个问题上陷入了很长一段时间
有什么意见吗
谢谢
selectedUser$
不是一种方法,因此您不能监视它。相反,如果你想的话,你可以把它分配给你的可观察对象
rapidColumnService.selectedUser$ = Observable.of({
'name': 'bhushan',
'desc': 'student'
})
但老实说,如果这是你的全部服务,我不明白你为什么还要嘲笑它。在使用真正的服务可能不会造成伤害的情况下,这非常简单。如果您使用的是真正的服务,那么只要选择user
,您就可以随时向被测组件发送新的内容
更新
您还可以做的另一件事是使用主题,而不是使用可观察的
。主题
也是一个可观察的
,但它允许您发出值,从而更容易模拟值进行测试
rapidColumnService.selectedUser$ = new BehaviorSubject<any>();
根据组件的设置和订阅方式,您可能只想使用普通的主题
,而不是`行为主题'。有关更多信息,请参阅。你是上帝,节省了我的时间+1我的expect声明应该怎么说?
rapidColumnService.selectedUser$.next({
'name': 'bhushan',
'desc': 'student'
});