我目前正在尝试使用Jasmine编写角度测试
我要测试的一件事是确保有角度的材质图块在单击材质图块时运行正确的功能。
为此,我监视要调用的方法,得到调用该函数的元素,触发事件并断言是否单击了间谍
spyOn(router, 'router.href="/"');
let element = fixture.debugElement.query(By.css('.matTile1select'));
element.triggerEventHandler('click', null);
fixture.detectChanges();
expect(..);
但是,当我触发事件处理程序时,我的测试实际上会导致函数执行,从而导致失败
我不想真正测试被调用的函数本身,而只是想真正地对其进行测试,所以我想知道,是否有一种方法可以确保在不实际运行函数本身的情况下执行一个函数?
答案 0 :(得分:0)
是的,假设“功能”是指组件中的某个功能,该功能在单击时会被调用。在这种情况下,只需间谍相关组件函数即可。这将使它存根(阻止其执行),但是您可以验证该方法是否被调用,甚至可以调用该方法。
类似这样的东西:
handleSpy = spyOn(component, 'clickHandler');
spyOn(router, 'router.href="/"');
let element = fixture.debugElement.query(By.css('.matTile1select'));
element.triggerEventHandler('click', null);
fixture.detectChanges();
expect(handleSpy).toHaveBeenCalledWith(/* correct params */);
如果您要发布完整的component.spec.ts
和component.ts
,我可能会更详细地介绍所需的代码。
我希望这会有所帮助。