从测试中确定管道内部的访问值

时间:2019-09-29 18:19:35

标签: angular testing jasmine

我有组件:

isLoading: boolean;
users: User[];
test: number = 1;

ngOnInit() {
  this.isLoading = true;
  this.userService.getUsers()
      .pipe(
        finalize(() => {
          // Disable loading when complete
          this.isLoading = false;
          this.test = 5;
        })
      )
  .subscribe(results => {this.users = results})
}

我已经对其进行了测试(.spec.ts)

    it('should be 5 after ngOnInit', () => {
      component.ngOnInit();
      expect(component.test).toBe(5);
    });

我在测试“预期1为5”时遇到错误。 为什么会出现此错误,如果我在ngOnInit之后读取值,则会忽略.finalize?我如何从.finalize块中获取价值。 Fixture.detectChanges()也无济于事。

1 个答案:

答案 0 :(得分:1)

可以像这样测试:

it('should set test value to 5', () => {
        const userService= TestBed.get(UserService);

        userService.getUsers()
            .pipe(
                finalize(() => {
                    expect(component.test).toEqual(5);
                } )
            )
    });

我使用了模拟服务:

class MockUserService {
    getUsers(): Observable<number> {
        return of(1, 2, 3);
    }
}

在configureTestingModule中

            {provide: UserService , useValue: new MockUserService ()}