簡體   English   中英

如何對 Angular 中的按鈕單擊事件進行單元測試?

[英]How to unit test a button click event in Angular?

我正在嘗試測試按鈕單擊事件。 官方 Angular 手冊說有兩種方法可以做到這一點。

1.

it('should raise selected event when clicked (triggerEventHandler)', () => {
  let selectedHero: Hero;
  const heroDe = fixture.debugElement.query(By.css('dashboard-hero'));
  comp.selected.subscribe((hero: Hero) => selectedHero = hero);
  heroDe.triggerEventHandler('click', null);
  expect(selectedHero).toBe(expectedHero);
});
it('should raise selected event when clicked (element.click)', () => {
  let selectedHero: Hero;
  const heroEl: HTMLElement = fixture.nativeElement.querySelector('.hero');
  comp.selected.subscribe((hero: Hero) => selectedHero = hero);
  heroEl.click();
  expect(selectedHero).toBe(expectedHero);
});

第一種方法對我來說效果很好。 但是當我嘗試第二個選項時,測試運行沒有錯誤,但 Karma 開始在無限循環中運行測試。

在此處輸入圖像描述

這是我對這兩種方式的實現。

it('test1', () => {
  fixture.detectChanges();
  let treeNodeElement = fixture.debugElement.query(By.css('#buttonSend'));
  treeNodeElement.triggerEventHandler('click', null);
  expect(component.tabService.tabs.length).toBe(1);
  expect(component.tabService.tabs[0].title).toBe('Test1');
});

it('test2', () => {
  fixture.detectChanges();
  const treeNodeElement: HTMLElement = fixture.nativeElement.querySelector('#buttonSend');
  treeNodeElement.click();
  expect(component.tabService.tabs.length).toBe(1);
  expect(component.tabService.tabs[0].title).toBe('Test1');
});

你能告訴我第二個選項的錯誤在哪里嗎?

我的解決方案是在 beforeEach() 中導入FormsModuleReactiveFormsModule 問題是單擊按鈕(這是一個提交按鈕)會產生刷新頁面的瀏覽器行為。 即使 FormsModule 和 ReactiveFormsModule 被導入到創建表單的組件中,它們也必須被導入到運行測試用例的 .spec 文件中

beforeEach(async () => {
 await TestBed.configureTestingModule({
  imports: [
    RouterTestingModule,
    RouterModule.forRoot([]),
    NgbModule,
    FormsModule,  <----
    ReactiveFormsModule,  <----
  ],
  declarations: [  
   ...

兩個模塊都應該從 @angular/forms 導入

import { FormsModule, ReactiveFormsModule } from '@angular/forms';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM