我要测试一个组件,该组件已订阅了服务中的主题。
组件订阅:
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()的方法,测试人员随后在该方法上进行监视。但是没有如何使它正常工作的例子。
答案 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