测试Directive
测试准备
我们测试一个指令:HoverFocusDirective. 属性选择器定义为hoverfocus,被应用的元素获得功能:鼠标滑过时背景颜色变为蓝色.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21  | import {
    Directive,
    HostListener,
    HostBinding
} from '@angular/core';
@Directive({
  selector: '[hoverfocus]'
})
export class HoverFocusDirective {
  @HostBinding("style.background-color") backgroundColor: string;
  @HostListener('mouseover') onHover() {
    this.backgroundColor = 'blue';
  }
  @HostListener('mouseout') onLeave() {
    this.backgroundColor = 'inherit';
  }
}
 
 | 
测试代码:
 | import {TestBed} from '@angular/core/testing';
import {HoverFocusDirective} from './hoverfocus.directive';
describe('Directive: HoverFocus', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [HoverFocusDirective]
    });
  });
});
 
 | 
通常我们需要创建一个测试用的组件来与被测试directive进行交互。
 | @Component({
  template: `<input type="text" hoverfocus>` 
})
class TestHoverFocusComponent {
}
 
 | 
测试代码如下:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15  | describe('Directive: HoverFocus', () => {
  let component: TestHoverFocusComponent;
  let fixture: ComponentFixture<TestHoverFocusComponent>;
  let inputEl: DebugElement;
  beforeEach(() => {
    TestBed.configureTestingModule({
      declarations: [TestHoverFocusComponent, HoverFocusDirective] 
    });
    fixture = TestBed.createComponent(TestHoverFocusComponent); 
    component = fixture.componentInstance;
    inputEl = fixture.debugElement.query(By.css('input'));
  });
});
 
 | 
与视图交互
 | it('hovering over input', () => {
  inputEl.triggerEventHandler('mouseover', null); 
  fixture.detectChanges();
  expect(inputEl.nativeElement.style.backgroundColor).toBe('blue'); 
  inputEl.triggerEventHandler('mouseout', null);
  fixture.detectChanges();
  console.log(inputEl.nativeElement.style.backgroundColor);
  expect(inputEl.nativeElement.style.backgroundColor).toBe('inherit');
});
 
 | 
- triggerEventHandler 触发事件.