如何检查MatSnackBar是否已打开?

时间:2018-02-13 08:34:42

标签: angular

每当有错误时,应打开小吃店,否则将被解雇。我想测试一下,

 handleErrors(error: ErrorMessage): void {
this.snackBar.open(error.message, '', {
  duration: 15000
})
}

routeToTallyConfig() {
 this.router.navigateByUrl(ROUTE_TALLY_CONFIG)
}

onStateChange(state) {
if (Util.isNotNull(state)) {
  // check errors
  if (Util.isNotNull(state.error)) {
    this.loader.display(false)
    this.handleErrors(state.error)
  } else {
    // no errors
    this.loader.display(false)
    if (Util.isNotNull(state.user) && Util.isNotNull(state.user.id)) {
      this.routeToTallyConfig()
    }
  }
}
}

在我的测试中,我将通过传递不同的状态值来调用onStateChange()函数。在传递错误时,应显示小吃栏,如果没有错误则应该将其解除。如何在角度4中测试此行为?

2 个答案:

答案 0 :(得分:3)

(我假设您设置了测试床并模拟了所有依赖项)

如果小吃已打开>,您实际上并未测试,您测试是否已调用小吃打开功能。测试依赖是否有效不是你的工作,而是依赖的工作。

这意味着如果您想测试是否调用了零食,您必须这样做:

it('handleErrors should open the snacker', () => {
  spyOn(component.snackBar, 'open');
  component.handleErrors({message: 'error'} as any);
  expect(component.snackBar.open).toHaveBeenCalledWith('error', '', {duration: 1500});
});

相反,您还可以测试是否未使用

调用零食
  spyOn(component.snackBar, 'open');
  // Tests ...
  expect(component.snackBar.open).not.toHaveBeenCalled();

答案 1 :(得分:0)

您可以检查_openedSnackBarRef快餐栏的getter属性。如果打开则返回MatSnackBarRef,否则返回null