角度6:测试服务返回的主题值

时间:2019-01-23 08:39:17

标签: testing angular6

关于测试服务中返回的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? 还是我必须完全改变我的测试方法?

0 个答案:

没有答案
相关问题