Angular2 单元测试 - 未触发 MdCheckbox 中的更改事件

标签 angular unit-testing typescript angular-material2

我有一个复选框,它有一个(更改)函数,它将变量“isSelected”设置为更改函数的 event.checked 值。现在我尝试在 this question on stackoverflow. 的帮助下对其进行测试但是,我觉得 (change) 事件没有被触发,因为 'isSelected' 没有改变。我还尝试在(更改)之后触发的函数上使用 spyOn,但这仍然返回未调用该函数(当前测试)。也许有人知道如何检测变化以及我做错了什么。这是我的代码:

import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';

@Component({
  selector: 'app-intents-checkbox',
  templateUrl: 'intents-checkbox.component.html',
  styleUrls: ['intents-checkbox.component.scss']
})
export class IntentsCheckboxComponent implements OnChanges {

  @Input() intentId;

  constructor() { }

  public isSelected = false;


  intentChecked(event, intentId): void {
    this.isSelected = event.checked;
  }
}

html:

<md-checkbox [checked]="isSelected"
             (change)="intentChecked($event, intentId)"
             class="project-checkbox">
</md-checkbox>

到目前为止我的测试:

it('should call intentChecked on change checkbox', () => {
    let de = fixture.debugElement.query(By.css('.project-checkbox'));
    de.triggerEventHandler('click', {});
    fixture.detectChanges();
    expect(component.intentChecked).toHaveBeenCalled();
  })

(因此测试 rn 的结果是失败,因为未按预期调用 intentChecked )。

谢谢!

最佳答案

我可以给你两个选择:

1) 在md-checkbox元素上触发change事件

it('should call intentChecked on change checkbox', () => {
  let de = fixture.debugElement.query(By.css('.project-checkbox'));
  spyOn(component, 'intentChecked');
  de.triggerEventHandler('change', {});

  expect(component.intentChecked).toHaveBeenCalled();
})

Plunker Example

2) 在内部 label 元素上触发 click 事件

it('should call intentChecked on change checkbox', () => {
  let de = fixture.debugElement.query(By.css('.project-checkbox label'));
  let el = de.nativeElement;

  spyOn(component, 'intentChecked');

  el.click();

  expect(component.intentChecked).toHaveBeenCalled();
})

Plunker Example

因为我们要检查是否调用了 intentChecked 方法,所以我们需要在这两种情况下监视此方法。

关于Angular2 单元测试 - 未触发 MdCheckbox 中的更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45444579/

相关文章:

带有 svg 元素的 Angular svg 匹配组件

angular - 如何在 Angular 中保存购物车?

java - 设计套接字创建测试,TDD Java

database - 重构数据库过程的最佳方法是什么?

java - 如何在 IntelliJ IDEA 中指定 JUnit 应该使用哪个@Tag

javascript - 可选的 React useState 类型与 jsdoc、typescript checkjs (javascript)

angular - 每个分支的 Azure Devops azure-pipelines.yml

html - 如何将三个图标对齐到页面标题的右侧

typescript - ts ES5/ES3 中的异步函数或方法需要 'Promise' 构造函数

angular - 如何在订阅期间检查 Angular 5 RxJS Observable 的 NULL 结果?