forked from vuejs/vue-test-utils
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrigger.spec.js
92 lines (75 loc) · 3.04 KB
/
trigger.spec.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import { compileToFunctions } from 'vue-template-compiler'
import ComponentWithEvents from '~resources/components/component-with-events.vue'
import ComponentWithMultipleInputs from '~resources/components/component-with-multiple-inputs.vue'
import { describeWithShallowAndMount } from '~resources/utils'
const assertElementIsFocused = element =>
expect(document.activeElement.id).toEqual(element.id)
describeWithShallowAndMount('trigger', mountingMethod => {
it('causes click handler to fire when wrapper.trigger("click") is called on a Component', async () => {
const clickHandler = jest.fn()
const wrapper = mountingMethod(ComponentWithEvents, {
propsData: { clickHandler }
})
const buttonArr = wrapper.findAll('.click')
await buttonArr.trigger('click')
expect(clickHandler).toHaveBeenCalled()
})
it('causes keydown handler to fire when wrapper.trigger("keydown") is fired on a Component', async () => {
const keydownHandler = jest.fn()
const wrapper = mountingMethod(ComponentWithEvents, {
propsData: { keydownHandler }
})
await wrapper.findAll('.keydown').trigger('keydown')
expect(keydownHandler).toHaveBeenCalled()
})
it('causes keydown handler to fire when wrapper.trigger("keydown.enter") is fired on a Component', async () => {
const keydownHandler = jest.fn()
const wrapper = mountingMethod(ComponentWithEvents, {
propsData: { keydownHandler }
})
await wrapper.findAll('.keydown-enter').trigger('keydown.enter')
expect(keydownHandler).toHaveBeenCalled()
})
it('should really focus element when trigger focus was called', async () => {
const wrapper = mountingMethod(ComponentWithMultipleInputs, {
attachTo: document.body
})
assertElementIsFocused(wrapper.get('[data-test-position="2"]').element)
await wrapper.get('[data-test-position="4"]').trigger('focus')
assertElementIsFocused(wrapper.get('[data-test-position="4"]').element)
await wrapper.get('[data-test-position="3"]').trigger('focus')
assertElementIsFocused(wrapper.get('[data-test-position="4"]').element)
await wrapper.get('[data-test-position="2"]').trigger('focus')
assertElementIsFocused(wrapper.get('[data-test-position="2"]').element)
})
it('throws an error if type is not a string', () => {
const wrapper = mountingMethod(ComponentWithEvents)
const invalidSelectors = [
undefined,
null,
NaN,
0,
2,
true,
false,
() => {},
{},
[]
]
invalidSelectors.forEach(invalidSelector => {
const message =
'[vue-test-utils]: wrapper.trigger() must be passed a string'
const fn = () => wrapper.trigger(invalidSelector)
expect(fn).toThrow(message)
})
})
it('throws error if wrapper array contains no items', () => {
const compiled = compileToFunctions('<div />')
const message = '[vue-test-utils]: trigger cannot be called on 0 items'
const fn = () =>
mountingMethod(compiled)
.findAll('p')
.trigger('p')
expect(fn).toThrow(message)
})
})