单元测试 – 单击Jasmine的提交按钮时,不会触发ngSubmit

前端之家收集整理的这篇文章主要介绍了单元测试 – 单击Jasmine的提交按钮时,不会触发ngSubmit前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试为Angular 2 Web应用程序编写基本测试,该应用程序试图检查在单击提交按钮时是否正在调用我的submit()函数.

当我这样做时,它在手动测试和我的Jasmine测试中都能正常工作……

<form #addPersonForm="ngForm">
    ...
    <button class="add-button" type="submit" (click)="submit()" tabindex="5">Add Person</button>
</form>

但是当我使用ngSubmit时,手动测试工作正常,但Jasmine单元测试失败(它表示从不调用提交函数)…

<form (ngSubmit)="submit()" #addPersonForm="ngForm">
    ...
    <button class="add-button" type="submit" tabindex="5">Add Person</button>
</form>

(顺便说一下,我试图让这个ngSubmit方法工作的原因是它在验证和支持回车键方面更好地发挥作用.)

这是我在Jasmine测试中所做的事情……

it('should call the submit method',() => {
    let debugElement = _fixture.debugElement;
    let button = debugElement.query(By.css('.add-button'));

    _fixture.detectChanges();

    TestHelper.click(button);
    expect(submitSpy).toHaveBeenCalled();
});

有什么具体的东西我需要监视我错过了吗?我没有在文档中找到与此问题相关的任何内容.

UPDATE

这是我的点击方法……

/** Simulate element click. Defaults to mouse left-button click event. */
export function click(el: DebugElement | HTMLElement,eventObj: any = ButtonClickEvents.left): void {
  if (el instanceof HTMLElement) {
    el.click();
  } else {
    (<DebugElement> el).triggerEventHandler('click',eventObj);
  }
}

解决方法

也许你可以查看类似的东西:

>将一个[formGroup] =“form”添加到< form>.
>首先检查表单是否有效.
>检查提交按钮是否已启用,即它没有错误[disabled] =“form.valid”(它应该是!form.valid).
>根据您的测试方式,您应该调用fixture.detectChanges();点击功能调用后.
>此外,您可以尝试仅使用此组件在新的干净项目中进行检查.

单击按钮时应提交表单.顺便说一下,对于我的测试,上面遇到了很多问题,在修复它们之后,虽然我使用的是Angular 6,但它可以正常运行,所以可能是早期版本中的一个错误.

猜你在找的Angularjs相关文章