aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2019-03-11 00:07:59 +0800
committercrupest <crupest@outlook.com>2019-03-11 00:07:59 +0800
commitf8cfca136a69c6589bb610a66ea5342fc585f19b (patch)
treea14bfc3d1d12e6852c0f383142b0a78a2f98a180 /Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts
parent233de3a11027fd88130882f20764ee5f2952abe0 (diff)
downloadtimeline-f8cfca136a69c6589bb610a66ea5342fc585f19b.tar.gz
timeline-f8cfca136a69c6589bb610a66ea5342fc585f19b.tar.bz2
timeline-f8cfca136a69c6589bb610a66ea5342fc585f19b.zip
Write unit tests.
Diffstat (limited to 'Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts')
-rw-r--r--Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts124
1 files changed, 124 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts b/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts
new file mode 100644
index 00000000..75710d0c
--- /dev/null
+++ b/Timeline/ClientApp/src/app/utilities/debounce-click.directive.spec.ts
@@ -0,0 +1,124 @@
+import { Component, ViewChild } from '@angular/core';
+import { async, TestBed, ComponentFixture, fakeAsync, tick } from '@angular/core/testing';
+import { By } from '@angular/platform-browser';
+
+import { DebounceClickDirective } from './debounce-click.directive';
+
+interface TestComponent {
+ clickHandler: () => void;
+}
+
+@Component({
+ selector: 'app-default-test',
+ template: '<button (appDebounceClick)="clickHandler()"></button>'
+})
+class DefaultDebounceTimeTestComponent {
+ @ViewChild(DebounceClickDirective)
+ directive: DebounceClickDirective;
+
+ clickHandler: () => void = () => { };
+}
+
+@Component({
+ selector: 'app-default-test',
+ template: '<button (appDebounceClick)="clickHandler()" [appDebounceClickTime]="debounceTime"></button>'
+})
+class CustomDebounceTimeTestComponent {
+ debounceTime: number;
+
+ @ViewChild(DebounceClickDirective)
+ directive: DebounceClickDirective;
+
+ clickHandler: () => void = () => { };
+}
+
+
+describe('DebounceClickDirective', () => {
+ let counter: number;
+
+ function initComponent(component: TestComponent) {
+ component.clickHandler = () => counter++;
+ }
+
+ beforeEach(() => {
+ counter = 0;
+ });
+
+ describe('default debounce time', () => {
+ let component: DefaultDebounceTimeTestComponent;
+ let componentFixture: ComponentFixture<DefaultDebounceTimeTestComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [DebounceClickDirective, DefaultDebounceTimeTestComponent]
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ componentFixture = TestBed.createComponent(DefaultDebounceTimeTestComponent);
+ component = componentFixture.componentInstance;
+ initComponent(component);
+ });
+
+ it('should create an instance', () => {
+ componentFixture.detectChanges();
+ expect(component.directive).toBeTruthy();
+ });
+
+ it('should work well', fakeAsync(() => {
+ function click() {
+ (<HTMLButtonElement>componentFixture.debugElement.query(By.css('button')).nativeElement).dispatchEvent(new MouseEvent('click'));
+ }
+ componentFixture.detectChanges();
+ expect(counter).toBe(0);
+ click();
+ tick(300);
+ expect(counter).toBe(0);
+ click();
+ tick();
+ expect(counter).toBe(0);
+ tick(500);
+ expect(counter).toBe(1);
+ }));
+ });
+
+
+ describe('custom debounce time', () => {
+ let component: CustomDebounceTimeTestComponent;
+ let componentFixture: ComponentFixture<CustomDebounceTimeTestComponent>;
+
+ beforeEach(async(() => {
+ TestBed.configureTestingModule({
+ declarations: [DebounceClickDirective, CustomDebounceTimeTestComponent]
+ }).compileComponents();
+ }));
+
+ beforeEach(() => {
+ componentFixture = TestBed.createComponent(CustomDebounceTimeTestComponent);
+ component = componentFixture.componentInstance;
+ initComponent(component);
+ component.debounceTime = 600;
+ });
+
+ it('should create an instance', () => {
+ componentFixture.detectChanges();
+ expect(component.directive).toBeTruthy();
+ });
+
+ it('should work well', fakeAsync(() => {
+ function click() {
+ (<HTMLButtonElement>componentFixture.debugElement.query(By.css('button')).nativeElement).dispatchEvent(new MouseEvent('click'));
+ }
+ componentFixture.detectChanges();
+ expect(counter).toBe(0);
+ click();
+ tick(300);
+ expect(counter).toBe(0);
+ click();
+ tick();
+ expect(counter).toBe(0);
+ tick(600);
+ expect(counter).toBe(1);
+ }));
+ });
+});