【发布时间】:2019-08-12 05:38:02
【问题描述】:
我有一个带有重播主题的服务。
export class UserService {
public userChanged: ReplaySubject<User> = new ReplaySubject<User>();
...
public getUser(userId?): void {
...
this.http.get(url, httpOptions).pipe(
catchError(this.handleError('getUser', null, 'Couldn\'t get user', options))
).subscribe( (user: User) => {
this.userChanged.next(user);
});
}
我的组件订阅了userChanged。
this.userService.userChanged.subscribe((user) => {
this.user = user;
});
现在,我想在组件测试中模拟我的UserService:
1 个选项Testing Observables in Angular)
import { of } from 'rxjs';
...
const userServiceSpy = jasmine.createSpyObj('UserService', {'userChanged': of({_id: '1'}) });
或2个选项)
const userServiceSpy = jasmine.createSpyObj('UserService', {'userChanged': () => of({_id: '1'}) });
或3个选项angular test tutorial)
const userServiceSpy = jasmine.createSpyObj('UserService', ['userChanged']});
const userChangedSpy = userServiceSpy.userChanged.and.returnValue( of({_id: '1'}) );
+
TestBed.configureTestingModule({
...
providers: [
...
{provide: UserService, useValue: userServiceSpy}
],
schemas: [NO_ERRORS_SCHEMA]
})
把这个错误告诉我:
this.userService.userChanged.subscribe is not a function
of 不应该返回一个 Observable 来订阅吗?
问题:如何模拟这个?
【问题讨论】:
标签: angular unit-testing