/
VSnackbar.spec.ts
131 lines (111 loc) 路 3.13 KB
/
VSnackbar.spec.ts
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Components
import VSnackbar from '../VSnackbar'
// Utilities
import {
mount,
MountOptions,
Wrapper,
} from '@vue/test-utils'
describe('VSnackbar.ts', () => {
type Instance = InstanceType<typeof VSnackbar>
let mountFunction: (options?: MountOptions<Instance>) => Wrapper<Instance>
beforeEach(() => {
mountFunction = (options = {} as MountOptions<Instance>) => {
return mount(VSnackbar, {
mocks: {
$vuetify: {
application: {
bar: 24,
bottom: 56,
footer: 48,
insetFooter: 32,
left: 256,
right: 256,
top: 64,
},
},
},
...options,
})
}
})
it.each([
[{}, true],
[{ text: true }, false],
[{ outlined: true }, false],
[{ light: true }, false],
])('should be dark when using %s', (propsData, expected: boolean) => {
const wrapper = mountFunction({ propsData })
expect(wrapper.vm.isDark).toBe(expected)
})
it.each([
[undefined, undefined, undefined],
[false, undefined, undefined],
[true, '256px', '256px'],
])('should have app padding on the x-axis using %s', (app, left, right) => {
const wrapper = mountFunction({
propsData: { app },
})
expect(wrapper.vm.styles).toHaveProperty('paddingLeft', left)
expect(wrapper.vm.styles).toHaveProperty('paddingRight', right)
})
it.each([
[undefined, true],
[false, true],
[true, false],
])('should have app padding on the x-axis using %s', (absolute, expected: boolean) => {
const wrapper = mountFunction({
propsData: { absolute },
})
expect(Object.keys(wrapper.vm.styles).length > 0).toBe(expected)
})
it.each([
[undefined, false],
[false, false],
[true, true],
])('should conditionally invoke setTimeout method using %s', (value, expected: boolean) => {
const setTimeout = jest.fn()
mountFunction({
propsData: { value },
methods: { setTimeout },
})
expect(setTimeout.mock.calls.length > 0).toBe(expected)
})
it.each([
[undefined, false],
[false, true],
])('should conditionally render transition content using %s', (transition, expected: boolean) => {
const genContent = jest.fn()
const genTransition = jest.fn()
mountFunction({
propsData: { transition },
methods: {
genTransition,
genContent,
},
})
expect(genContent.mock.calls.length > 0).toBe(expected)
expect(genTransition.mock.calls.length > 0).toBe(!expected)
})
it.each([
[undefined, true],
[100, true],
[0, false],
[-1, false],
])('should condtionally remove the snackbar when using a timeout value of %s', (timeout, expected) => {
jest.useFakeTimers()
const spy = jest.spyOn(window, 'setTimeout')
mountFunction({
propsData: {
timeout,
value: true,
},
})
jest.runAllTimers()
expect(spy.mock.calls.length > 0).toBe(expected)
// TODO: remove in v3
if (timeout === 0) {
expect('[Vuetify] [UPGRADE] \'timeout="0"\' is deprecated, use \'-1\' instead.').toHaveBeenTipped()
}
})
})