aboutsummaryrefslogtreecommitdiff
path: root/Timeline/ClientApp/src/app/debounce-click.directive.spec.ts
diff options
context:
space:
mode:
author杨宇千 <crupest@outlook.com>2019-03-06 23:29:12 +0800
committerGitHub <noreply@github.com>2019-03-06 23:29:12 +0800
commit4b37c96de2c7d3fe046a6f342d2da8ef03d3c807 (patch)
treee5618cddfa6f637d7033ae5b52e6da825eb53c63 /Timeline/ClientApp/src/app/debounce-click.directive.spec.ts
parentaca753fba19a221f1aec65030ba4aec4bc34f576 (diff)
parentb5e01c4571061cbaf5915aa4c0f1b7126ef1ed18 (diff)
downloadtimeline-4b37c96de2c7d3fe046a6f342d2da8ef03d3c807.tar.gz
timeline-4b37c96de2c7d3fe046a6f342d2da8ef03d3c807.tar.bz2
timeline-4b37c96de2c7d3fe046a6f342d2da8ef03d3c807.zip
Merge pull request #3 from crupest/user
Develop user dialog.
Diffstat (limited to 'Timeline/ClientApp/src/app/debounce-click.directive.spec.ts')
-rw-r--r--Timeline/ClientApp/src/app/debounce-click.directive.spec.ts124
1 files changed, 124 insertions, 0 deletions
diff --git a/Timeline/ClientApp/src/app/debounce-click.directive.spec.ts b/Timeline/ClientApp/src/app/debounce-click.directive.spec.ts
new file mode 100644
index 00000000..75710d0c
--- /dev/null
+++ b/Timeline/ClientApp/src/app/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);
+ }));
+ });
+});