如何在服务中测试具有简单主题的订阅

时间:2018-09-08 18:03:45

标签: angular rxjs observable karma-runner subject

我要测试一个组件,该组件已订阅了服务中的主题。

组件订阅:

let x: string[] = [];

public ngAfterViewInit(): void {
  this.subscription = this.service.observer$.subscribe((data: any) => {
    this.x = data.value;
    ...
  }
}

该服务具有“主题”属性:

public observer$: Subject<any>;

在测试用例中,我尝试如下进行设置:

beforeEach(() => {
    fixture = TestBed.createComponent(Component);
    component = fixture.componentInstance;
    service = fixture.debugElement.injector.get(Service);
    fixture.detectChanges();
  });

it('should get a subscription event', () => {
    const response: any[] = [];
    service.observer$ = new Subject<any>();
    service.observer$.next(['some content']);

    fixture.detectChanges();

    expect(component.x.length).toBeGreaterThan(0);

  });

这不起作用。 x保持为空。

任何人都可以提供测试此方法的正确方法吗?我看到了一些示例,其中该服务提供了用于observer.new()的方法,测试人员随后在该方法上进行监视。但是没有如何使它正常工作的例子。

1 个答案:

答案 0 :(得分:0)

AfterViewInit仅在每次初始化时触发一个。 因此,您的第二个Using cmd3 As New OleDbCommand(" INSERT INTO tblPalletRecords (PackDay, Grade, Grower, HarvestDate, Status, Quality,PalletNumber,CaseCount) SELECT PackDay, Grade, Grower, HarvestDate, Status, Quality,@PalletNumber,@CaseCount FROM tblPalletRecords WHERE ID = @x", conn) cmd3.Parameters.AddWithValue("@x", txbID.Text) cmd3.Parameters.AddWithValue("@PalletNumber", PalletNumber.Text) cmd3.Parameters.AddWithValue("@CaseCount", CaseCount.Text) conn.Open() cmd3.ExecuteScalar() conn.Close() End Using 不会再次触发它。 您需要在fixture.detectChanges()

中删除fixture.detectChanges()

类似这样的东西

beforeEach