我应该如何测试这个角度分量?

时间:2019-05-17 08:54:06

标签: javascript angular unit-testing testing

请问是否我有一个单击时会发出事件的组件,即

    @Component({
      selector: 'component-checkout-payment',
      template: `<button (click)="click()>Click me</button>`
    })
    export class TestComponent{

      @Output() clicked = new EventEmitter<boolean>();

      click() {
        this.clicked.emit(true);
      }
    }

然后我将像下面分别测试事件组件方法吗?

it('should emit an event when `click` is called`, () => {
  jest.spyOn(component.clicked, 'emit');
  component.click();
  expect(component.clicked.emit).toHaveBeenCalledWith(true);
});

it('should call `click` when button has been clicked`, () => {
  jest.spyOn(component, 'click');
  let button = fixture.debugElement.nativeElement.querySelector('button');
  button.click();
  expect(component.click).toHaveBeenCalled();
})

还是我要测试一下单击按钮后是否发出事件?

it('should emit event when button has been clicked`, () => {
  jest.spyOn(component.clicked, 'emit');
  let button = fixture.debugElement.nativeElement.querySelector('button');
  button.click();
  expect(component.clicked.emit).toHaveBeenCalledWith(true)
})

我假设是后者,因为它将前两个测试都合而为一。但是,我想澄清一下。

我还想知道这类测试是单元测试,集成测试还是e2e测试。

1 个答案:

答案 0 :(得分:2)

这两种方法都是有效的,这完全取决于您的偏好。

这些是单元测试。它们防止了应用程序中的副作用:如果测试失败,则表明您的功能已被修改。

这不是集成测试,因为您只测试单个组件,也不是端到端测试,因为您没有完全通过后端。