关于测试服务中返回的Subject值,我在概念上存在疑问。
以下是简化的代码,反映了我所拥有的(不是我所写的)本质:
服务:
@Injectable()
export class MyService {
flag: boolean = false;
private flagSubject = new Subject<boolean>();
private mySecondService: MySecondService;
constructor(private mySecondService: MySecondService) {
...
this.flagSubject.next(...);
}
isFlag(): Observable<boolean> {
return this.flagSubject.asObservable();
};
...
}
测试设置:
describe('MyService', () => {
let myService: MyService;
let mySecondService: MySecondService;
beforeEach(async(() => {
mySecondService = new MySecondService();
myService = new MyService(mySecondService);
}));
it('should return value from observable', (done: DoneFn) => {
myService.isFlag().subscribe(value => {
console.log('VALUE:', value); // Never comes here!
expect(value).toBeFalsy();
done();
});
});
});
我收到此错误:
错误:超时-超时内未调用异步回调 由jasmine.DEFAULT_TIMEOUT_INTERVAL指定。
如果我将isFlag()函数更改为此,那么它将起作用:
isFlag(): Observable<boolean> {
return of(true);
};
很明显,flagSubject的(预期)行为是问题所在。
问题是:例如,我是否必须更改代码并使flagSubject成为ReplaySubject? 还是我必须完全改变我的测试方法?