Skip to content

Commit 0303844

Browse files
author
Netanel Basal
committed
feat: 🎸 mouse
add mouse helpers
1 parent 3bf4e35 commit 0303844

File tree

5 files changed

+39
-2
lines changed

5 files changed

+39
-2
lines changed

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,5 @@ node_js:
66
- '10'
77

88
script:
9-
- npm run lint
109
- npm run build
1110
- npm run test:ci

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ Spectator helps you get rid of all the boilerplate grunt work, leaving you with
3434
- [Testing Components](#testing-components)
3535
- [Events API](#events-api)
3636
- [Keyboard helpers](#keyboard-helpers)
37+
- [Mouse helpers](#mouse-helpers)
3738
- [Queries](#queries)
3839
- [String Selector](#string-selector)
3940
- [Type Selector](#type-selector)
@@ -209,6 +210,12 @@ spectator.keyboard.pressBackspace();
209210
spectator.keyboard.pressKey('a');
210211
```
211212

213+
### Mouse helpers
214+
```ts
215+
spectator.mouse.contextmenu('.selector');
216+
spectator.mouse.dblclick('.selector');
217+
```
218+
212219
Note that each one of the above methods will also run `detectChanges()`.
213220

214221
### Queries

projects/spectator/src/lib/base/dom-spectator.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ export abstract class DomSpectator<I> extends BaseSpectator {
169169
return event;
170170
}
171171

172-
public get keyboard(): any {
172+
public get keyboard() {
173173
return {
174174
pressKey: (key: string, selector: SpectatorElement = this.element, event = KEY_UP) => {
175175
this.dispatchKeyboardEvent(selector, event, key);
@@ -189,6 +189,17 @@ export abstract class DomSpectator<I> extends BaseSpectator {
189189
};
190190
}
191191

192+
public get mouse() {
193+
return {
194+
contextmenu: (selector: SpectatorElement = this.element) => {
195+
this.dispatchMouseEvent(selector, 'contextmenu');
196+
},
197+
dblclick: (selector: SpectatorElement = this.element) => {
198+
this.dispatchMouseEvent(selector, 'dblclick');
199+
}
200+
};
201+
}
202+
192203
public dispatchTouchEvent(selector: SpectatorElement = this.element, type: string, x: number = 0, y: number = 0): void {
193204
dispatchTouchEvent(this.getNativeElement(selector), type, x, y);
194205
this.detectChanges();

projects/spectator/test/button/button.component.spec.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ describe('ButtonComponent', () => {
4949
spectator.detectChanges();
5050
expect(spectator.query('p')).toHaveText('Netanel');
5151
});
52+
53+
it('should support contextmenu', () => {
54+
spectator = createComponent();
55+
spyOn(spectator.component, 'contextmenu');
56+
spectator.mouse.contextmenu('.contextmenu');
57+
expect(spectator.component.contextmenu).toHaveBeenCalled();
58+
});
59+
60+
it('should support dblclick', () => {
61+
spectator = createComponent();
62+
spyOn(spectator.component, 'dblclick');
63+
spectator.mouse.dblclick('.dblclick');
64+
expect(spectator.component.dblclick).toHaveBeenCalled();
65+
});
5266
});
5367

5468
describe('ButtonComponent', () => {

projects/spectator/test/button/button.component.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import { QueryService } from '../query.service';
99
template: `
1010
<button class="{{ className }}" (click)="onClick($event)">{{ title }}</button>
1111
<p>{{ queryService.selectName() | async }}</p>
12+
<div class="contextmenu" (contextmenu)="contextmenu()">Context menu</div>
13+
<div class="dblclick" (dblclick)="dblclick()">dblclick</div>
1214
`,
1315
providers: [QueryService],
1416
styles: []
@@ -25,4 +27,8 @@ export class ButtonComponent {
2527
public onClick($event: any): void {
2628
this.click.emit($event);
2729
}
30+
31+
public contextmenu() {}
32+
33+
public dblclick() {}
2834
}

0 commit comments

Comments
 (0)