我正在编写angular2组件的测试用例。
我创建了一个使用可观察流的服务,如下所示:
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);
}
}
现在在我的组件中,我订阅了这个流:
getSelectedUser() {
this.subscriptionUser = this.userService.selectedUser$.subscribe(
selectedUser => {
this.selectedUser = selectedUser;
}
);
}
现在在我的spec.ts文件中,我想将此流模拟为:
spyOn(userService, 'selectedUser$')
.and.returnValue(Observable.of({
'name': 'bhushan',
'desc': 'student'
}));
但它一直给我以下错误:
错误:spyOn找不到要监视selectColumn的对象$()
有没有办法做到这一点?
我现在很久没遇到这个问题了。
任何输入?
感谢
答案 0 :(得分:7)
selectedUser$
不是一种方法,所以你不能窥探它。相反,如果你想要,你可以给它分配一个你的可观察
rapidColumnService.selectedUser$ = Observable.of({
'name': 'bhushan',
'desc': 'student'
})
但老实说,如果那是你的完整服务,我不明白为什么你甚至需要嘲笑它。这很简单,使用真实服务可能不会受到伤害。如果您使用真实服务,那么只要您想要向被测组件发送新内容,就可以selectUser
。