expect-webdriverio 5.3.3 → 5.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/{tsconfig.tsbuildinfo → tsconfig.build.tsbuildinfo} +1 -1
- package/package.json +2 -2
- package/types/expect-webdriverio.d.ts +27 -38
- package/types/standalone.d.ts +0 -2
- package/lib/test/__fixtures__/utils.js +0 -19
- package/lib/test/index.test.js +0 -8
- package/lib/test/matchers/beMatchers.test.js +0 -109
- package/lib/test/matchers/browser/toHaveClipboardText.test.js +0 -21
- package/lib/test/matchers/browserMatchers.test.js +0 -102
- package/lib/test/matchers/element/toBeDisabled.test.js +0 -121
- package/lib/test/matchers/element/toHaveAttribute.test.js +0 -131
- package/lib/test/matchers/element/toHaveChildren.test.js +0 -62
- package/lib/test/matchers/element/toHaveComputedLabel.test.js +0 -284
- package/lib/test/matchers/element/toHaveComputedRole.test.js +0 -284
- package/lib/test/matchers/element/toHaveElementClass.test.js +0 -125
- package/lib/test/matchers/element/toHaveElementProperty.test.js +0 -111
- package/lib/test/matchers/element/toHaveHTML.test.js +0 -291
- package/lib/test/matchers/element/toHaveHeight.test.js +0 -171
- package/lib/test/matchers/element/toHaveHref.test.js +0 -54
- package/lib/test/matchers/element/toHaveId.test.js +0 -54
- package/lib/test/matchers/element/toHaveSize.test.js +0 -109
- package/lib/test/matchers/element/toHaveStyle.test.js +0 -199
- package/lib/test/matchers/element/toHaveText.test.js +0 -333
- package/lib/test/matchers/element/toHaveValue.test.js +0 -81
- package/lib/test/matchers/element/toHaveWidth.test.js +0 -171
- package/lib/test/matchers/elements/toBeElementsArrayOfSize.test.js +0 -141
- package/lib/test/matchers/mock/toBeRequested.test.js +0 -73
- package/lib/test/matchers/mock/toBeRequestedTimes.test.js +0 -108
- package/lib/test/matchers/mock/toBeRequestedWith.test.js +0 -343
- package/lib/test/matchers.test.js +0 -54
- package/lib/test/snapshot.test.js +0 -53
- package/lib/test/softAssertions.test.js +0 -332
- package/lib/test/util/elementsUtil.test.js +0 -18
- package/lib/test/util/formatMessage.test.js +0 -96
- package/lib/test/util/refetchElements.test.js +0 -19
- package/lib/test/utils.test.js +0 -117
- /package/lib/{src/constants.js → constants.js} +0 -0
- /package/lib/{src/index.js → index.js} +0 -0
- /package/lib/{src/jasmineUtils.js → jasmineUtils.js} +0 -0
- /package/lib/{src/matchers → matchers}/browser/toHaveClipboardText.js +0 -0
- /package/lib/{src/matchers → matchers}/browser/toHaveTitle.js +0 -0
- /package/lib/{src/matchers → matchers}/browser/toHaveUrl.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeClickable.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeDisabled.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeDisplayed.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeDisplayedInViewport.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeEnabled.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeExisting.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeFocused.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toBeSelected.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveAttribute.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveChildren.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveClass.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveComputedLabel.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveComputedRole.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveElementProperty.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveHTML.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveHeight.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveHref.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveId.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveSize.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveStyle.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveText.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveValue.js +0 -0
- /package/lib/{src/matchers → matchers}/element/toHaveWidth.js +0 -0
- /package/lib/{src/matchers → matchers}/elements/toBeElementsArrayOfSize.js +0 -0
- /package/lib/{src/matchers → matchers}/mock/toBeRequested.js +0 -0
- /package/lib/{src/matchers → matchers}/mock/toBeRequestedTimes.js +0 -0
- /package/lib/{src/matchers → matchers}/mock/toBeRequestedWith.js +0 -0
- /package/lib/{src/matchers → matchers}/snapshot.js +0 -0
- /package/lib/{src/matchers.js → matchers.js} +0 -0
- /package/lib/{src/snapshot.js → snapshot.js} +0 -0
- /package/lib/{src/softAssert.js → softAssert.js} +0 -0
- /package/lib/{src/softAssertService.js → softAssertService.js} +0 -0
- /package/lib/{src/softExpect.js → softExpect.js} +0 -0
- /package/lib/{src/types.js → types.js} +0 -0
- /package/lib/{src/util → util}/elementsUtil.js +0 -0
- /package/lib/{src/util → util}/executeCommand.js +0 -0
- /package/lib/{src/util → util}/formatMessage.js +0 -0
- /package/lib/{src/util → util}/refetchElements.js +0 -0
- /package/lib/{src/utils.js → utils.js} +0 -0
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
import { vi, test, describe, expect, beforeEach } from 'vitest';
|
|
2
|
-
import { $ } from '@wdio/globals';
|
|
3
|
-
import { getExpectMessage, getReceived, getExpected } from '../../__fixtures__/utils.js';
|
|
4
|
-
import { toHaveComputedRole } from '../../../src/matchers/element/toHaveComputedRole.js';
|
|
5
|
-
vi.mock('@wdio/globals');
|
|
6
|
-
describe('toHaveComputedcomputed role', () => {
|
|
7
|
-
test('wait for success', async () => {
|
|
8
|
-
const el = await $('sel');
|
|
9
|
-
el._attempts = 2;
|
|
10
|
-
el._computed_role = function () {
|
|
11
|
-
if (this._attempts > 0) {
|
|
12
|
-
this._attempts--;
|
|
13
|
-
return '';
|
|
14
|
-
}
|
|
15
|
-
return 'WebdriverIO';
|
|
16
|
-
};
|
|
17
|
-
const beforeAssertion = vi.fn();
|
|
18
|
-
const afterAssertion = vi.fn();
|
|
19
|
-
const result = await toHaveComputedRole.call({}, el, 'WebdriverIO', { ignoreCase: true, beforeAssertion, afterAssertion });
|
|
20
|
-
expect(result.pass).toBe(true);
|
|
21
|
-
expect(el._attempts).toBe(0);
|
|
22
|
-
expect(beforeAssertion).toBeCalledWith({
|
|
23
|
-
matcherName: 'toHaveComputedRole',
|
|
24
|
-
expectedValue: 'WebdriverIO',
|
|
25
|
-
options: { ignoreCase: true, beforeAssertion, afterAssertion }
|
|
26
|
-
});
|
|
27
|
-
expect(afterAssertion).toBeCalledWith({
|
|
28
|
-
matcherName: 'toHaveComputedRole',
|
|
29
|
-
expectedValue: 'WebdriverIO',
|
|
30
|
-
options: { ignoreCase: true, beforeAssertion, afterAssertion },
|
|
31
|
-
result
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
test('wait but failure', async () => {
|
|
35
|
-
const el = await $('sel');
|
|
36
|
-
el._computed_role = function () {
|
|
37
|
-
throw new Error('some error');
|
|
38
|
-
};
|
|
39
|
-
await expect(() => toHaveComputedRole.call({}, el, 'WebdriverIO', { ignoreCase: true }))
|
|
40
|
-
.rejects.toThrow('some error');
|
|
41
|
-
});
|
|
42
|
-
test('success on the first attempt', async () => {
|
|
43
|
-
const el = await $('sel');
|
|
44
|
-
el._attempts = 0;
|
|
45
|
-
el._computed_role = function () {
|
|
46
|
-
this._attempts++;
|
|
47
|
-
return 'WebdriverIO';
|
|
48
|
-
};
|
|
49
|
-
const result = await toHaveComputedRole.call({}, el, 'WebdriverIO', { ignoreCase: true });
|
|
50
|
-
expect(result.pass).toBe(true);
|
|
51
|
-
expect(el._attempts).toBe(1);
|
|
52
|
-
});
|
|
53
|
-
test('no wait - failure', async () => {
|
|
54
|
-
const el = await $('sel');
|
|
55
|
-
el._attempts = 0;
|
|
56
|
-
el._computed_role = function () {
|
|
57
|
-
this._attempts++;
|
|
58
|
-
return 'WebdriverIO';
|
|
59
|
-
};
|
|
60
|
-
const result = await toHaveComputedRole.call({}, el, 'foo', { wait: 0 });
|
|
61
|
-
expect(result.pass).toBe(false);
|
|
62
|
-
expect(el._attempts).toBe(1);
|
|
63
|
-
});
|
|
64
|
-
test('no wait - success', async () => {
|
|
65
|
-
const el = await $('sel');
|
|
66
|
-
el._attempts = 0;
|
|
67
|
-
el._computed_role = function () {
|
|
68
|
-
this._attempts++;
|
|
69
|
-
return 'WebdriverIO';
|
|
70
|
-
};
|
|
71
|
-
const result = await toHaveComputedRole.call({}, el, 'WebdriverIO', { wait: 0 });
|
|
72
|
-
expect(result.pass).toBe(true);
|
|
73
|
-
expect(el._attempts).toBe(1);
|
|
74
|
-
});
|
|
75
|
-
test('not - failure', async () => {
|
|
76
|
-
const el = await $('sel');
|
|
77
|
-
el._computed_role = function () {
|
|
78
|
-
return 'WebdriverIO';
|
|
79
|
-
};
|
|
80
|
-
const result = await toHaveComputedRole.call({ isNot: true }, el, 'WebdriverIO', { wait: 0 });
|
|
81
|
-
const received = getReceived(result.message());
|
|
82
|
-
expect(received).not.toContain('not');
|
|
83
|
-
expect(result.pass).toBe(true);
|
|
84
|
-
});
|
|
85
|
-
test("should return false if computed roles don't match", async () => {
|
|
86
|
-
const el = await $('sel');
|
|
87
|
-
el._computed_role = function () {
|
|
88
|
-
return 'WebdriverIO';
|
|
89
|
-
};
|
|
90
|
-
const result = await toHaveComputedRole.bind({ isNot: true })(el, 'foobar', { wait: 1 });
|
|
91
|
-
expect(result.pass).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
test('should return true if computed roles match', async () => {
|
|
94
|
-
const el = await $('sel');
|
|
95
|
-
el._computed_role = function () {
|
|
96
|
-
return 'WebdriverIO';
|
|
97
|
-
};
|
|
98
|
-
const result = await toHaveComputedRole.bind({ isNot: true })(el, 'WebdriverIO', { wait: 1 });
|
|
99
|
-
expect(result.pass).toBe(true);
|
|
100
|
-
});
|
|
101
|
-
test('should return true if actual computed role + single replacer matches the expected computed role', async () => {
|
|
102
|
-
const el = await $('sel');
|
|
103
|
-
el._computed_role = function () {
|
|
104
|
-
return 'WebdriverIO';
|
|
105
|
-
};
|
|
106
|
-
const result = await toHaveComputedRole.bind({})(el, 'BrowserdriverIO', {
|
|
107
|
-
replace: ['Web', 'Browser'],
|
|
108
|
-
});
|
|
109
|
-
expect(result.pass).toBe(true);
|
|
110
|
-
});
|
|
111
|
-
test('should return true if actual computed role + replace (string) matches the expected computed role', async () => {
|
|
112
|
-
const el = await $('sel');
|
|
113
|
-
el._computed_role = function () {
|
|
114
|
-
return 'WebdriverIO';
|
|
115
|
-
};
|
|
116
|
-
const result = await toHaveComputedRole.bind({})(el, 'BrowserdriverIO', {
|
|
117
|
-
replace: [['Web', 'Browser']],
|
|
118
|
-
});
|
|
119
|
-
expect(result.pass).toBe(true);
|
|
120
|
-
});
|
|
121
|
-
test('should return true if actual computed role + replace (regex) matches the expected computed role', async () => {
|
|
122
|
-
const el = await $('sel');
|
|
123
|
-
el._computed_role = function () {
|
|
124
|
-
return 'WebdriverIO';
|
|
125
|
-
};
|
|
126
|
-
const result = await toHaveComputedRole.bind({})(el, 'BrowserdriverIO', {
|
|
127
|
-
replace: [[/Web/, 'Browser']],
|
|
128
|
-
});
|
|
129
|
-
expect(result.pass).toBe(true);
|
|
130
|
-
});
|
|
131
|
-
test('should return true if actual computed role starts with expected computed role', async () => {
|
|
132
|
-
const el = await $('sel');
|
|
133
|
-
el._computed_role = function () {
|
|
134
|
-
return 'WebdriverIO';
|
|
135
|
-
};
|
|
136
|
-
const result = await toHaveComputedRole.bind({})(el, 'Webd', { atStart: true });
|
|
137
|
-
expect(result.pass).toBe(true);
|
|
138
|
-
});
|
|
139
|
-
test('should return true if actual computed role ends with expected computed role', async () => {
|
|
140
|
-
const el = await $('sel');
|
|
141
|
-
el._computed_role = function () {
|
|
142
|
-
return 'WebdriverIO';
|
|
143
|
-
};
|
|
144
|
-
const result = await toHaveComputedRole.bind({})(el, 'erIO', { atEnd: true });
|
|
145
|
-
expect(result.pass).toBe(true);
|
|
146
|
-
});
|
|
147
|
-
test('should return true if actual computed role contains the expected computed role at the given index', async () => {
|
|
148
|
-
const el = await $('sel');
|
|
149
|
-
el._computed_role = function () {
|
|
150
|
-
return 'WebdriverIO';
|
|
151
|
-
};
|
|
152
|
-
const result = await toHaveComputedRole.bind({})(el, 'iver', { atIndex: 5 });
|
|
153
|
-
expect(result.pass).toBe(true);
|
|
154
|
-
});
|
|
155
|
-
test('message', async () => {
|
|
156
|
-
const el = await $('sel');
|
|
157
|
-
el._computed_role = function () {
|
|
158
|
-
return '';
|
|
159
|
-
};
|
|
160
|
-
const result = await toHaveComputedRole.call({}, el, 'WebdriverIO');
|
|
161
|
-
expect(getExpectMessage(result.message())).toContain('to have computed role');
|
|
162
|
-
});
|
|
163
|
-
test('success if array matches with computed role and ignoreCase', async () => {
|
|
164
|
-
const el = await $('sel');
|
|
165
|
-
el._attempts = 0;
|
|
166
|
-
el._computed_role = function () {
|
|
167
|
-
this._attempts++;
|
|
168
|
-
return 'WebdriverIO';
|
|
169
|
-
};
|
|
170
|
-
const result = await toHaveComputedRole.call({}, el, ['div', 'WebdriverIO'], { ignoreCase: true });
|
|
171
|
-
expect(result.pass).toBe(true);
|
|
172
|
-
expect(el._attempts).toBe(1);
|
|
173
|
-
});
|
|
174
|
-
test('success if array matches with computed role and trim', async () => {
|
|
175
|
-
const el = await $('sel');
|
|
176
|
-
el._attempts = 0;
|
|
177
|
-
el._computed_role = function () {
|
|
178
|
-
this._attempts++;
|
|
179
|
-
return ' WebdriverIO ';
|
|
180
|
-
};
|
|
181
|
-
const result = await toHaveComputedRole.call({}, el, ['div', 'WebdriverIO', 'toto'], {
|
|
182
|
-
trim: true,
|
|
183
|
-
});
|
|
184
|
-
expect(result.pass).toBe(true);
|
|
185
|
-
expect(el._attempts).toBe(1);
|
|
186
|
-
});
|
|
187
|
-
test('success if array matches with computed role and replace (string)', async () => {
|
|
188
|
-
const el = await $('sel');
|
|
189
|
-
el._attempts = 0;
|
|
190
|
-
el._computed_role = function () {
|
|
191
|
-
this._attempts++;
|
|
192
|
-
return 'WebdriverIO';
|
|
193
|
-
};
|
|
194
|
-
const result = await toHaveComputedRole.call({}, el, ['div', 'BrowserdriverIO', 'toto'], {
|
|
195
|
-
replace: [['Web', 'Browser']],
|
|
196
|
-
});
|
|
197
|
-
expect(result.pass).toBe(true);
|
|
198
|
-
expect(el._attempts).toBe(1);
|
|
199
|
-
});
|
|
200
|
-
test('success if array matches with computed role and replace (regex)', async () => {
|
|
201
|
-
const el = await $('sel');
|
|
202
|
-
el._attempts = 0;
|
|
203
|
-
el._computed_role = function () {
|
|
204
|
-
this._attempts++;
|
|
205
|
-
return 'WebdriverIO';
|
|
206
|
-
};
|
|
207
|
-
const result = await toHaveComputedRole.call({}, el, ['div', 'BrowserdriverIO', 'toto'], {
|
|
208
|
-
replace: [[/Web/g, 'Browser']],
|
|
209
|
-
});
|
|
210
|
-
expect(result.pass).toBe(true);
|
|
211
|
-
expect(el._attempts).toBe(1);
|
|
212
|
-
});
|
|
213
|
-
test('success if array matches with computed role and multiple replacers and one of the replacers is a function', async () => {
|
|
214
|
-
const el = await $('sel');
|
|
215
|
-
el._attempts = 0;
|
|
216
|
-
el._computed_role = function () {
|
|
217
|
-
this._attempts++;
|
|
218
|
-
return 'WebdriverIO';
|
|
219
|
-
};
|
|
220
|
-
const result = await toHaveComputedRole.call({}, el, ['div', 'browserdriverio', 'toto'], {
|
|
221
|
-
replace: [
|
|
222
|
-
[/Web/g, 'Browser'],
|
|
223
|
-
[/[A-Z]/g, (match) => match.toLowerCase()],
|
|
224
|
-
],
|
|
225
|
-
});
|
|
226
|
-
expect(result.pass).toBe(true);
|
|
227
|
-
expect(el._attempts).toBe(1);
|
|
228
|
-
});
|
|
229
|
-
test('failure if array does not match with computed role', async () => {
|
|
230
|
-
const el = await $('sel');
|
|
231
|
-
el._attempts = 0;
|
|
232
|
-
el._computed_role = function () {
|
|
233
|
-
this._attempts++;
|
|
234
|
-
return 'WebdriverIO';
|
|
235
|
-
};
|
|
236
|
-
const result = await toHaveComputedRole.call({}, el, ['div', 'foo'], { wait: 1 });
|
|
237
|
-
expect(result.pass).toBe(false);
|
|
238
|
-
expect(el._attempts).toBe(1);
|
|
239
|
-
});
|
|
240
|
-
describe('with RegExp', () => {
|
|
241
|
-
let el;
|
|
242
|
-
beforeEach(async () => {
|
|
243
|
-
el = await $('sel');
|
|
244
|
-
el._computed_role = vi.fn().mockImplementation(() => {
|
|
245
|
-
return 'This is example computed role';
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
test('success if match', async () => {
|
|
249
|
-
const result = await toHaveComputedRole.call({}, el, /ExAmplE/i);
|
|
250
|
-
expect(result.pass).toBe(true);
|
|
251
|
-
});
|
|
252
|
-
test('success if array matches with RegExp', async () => {
|
|
253
|
-
const result = await toHaveComputedRole.call({}, el, ['div', /ExAmPlE/i]);
|
|
254
|
-
expect(result.pass).toBe(true);
|
|
255
|
-
});
|
|
256
|
-
test('success if array matches with computed role', async () => {
|
|
257
|
-
const result = await toHaveComputedRole.call({}, el, [
|
|
258
|
-
'This is example computed role',
|
|
259
|
-
/Webdriver/i,
|
|
260
|
-
]);
|
|
261
|
-
expect(result.pass).toBe(true);
|
|
262
|
-
});
|
|
263
|
-
test('success if array matches with computed role and ignoreCase', async () => {
|
|
264
|
-
const result = await toHaveComputedRole.call({}, el, ['ThIs Is ExAmPlE computed role', /Webdriver/i], {
|
|
265
|
-
ignoreCase: true,
|
|
266
|
-
});
|
|
267
|
-
expect(result.pass).toBe(true);
|
|
268
|
-
});
|
|
269
|
-
test('failure if no match', async () => {
|
|
270
|
-
const result = await toHaveComputedRole.call({}, el, /Webdriver/i);
|
|
271
|
-
expect(result.pass).toBe(false);
|
|
272
|
-
expect(getExpectMessage(result.message())).toContain('to have computed role');
|
|
273
|
-
expect(getExpected(result.message())).toContain('/Webdriver/i');
|
|
274
|
-
expect(getReceived(result.message())).toContain('This is example computed role');
|
|
275
|
-
});
|
|
276
|
-
test('failure if array does not match with computed role', async () => {
|
|
277
|
-
const result = await toHaveComputedRole.call({}, el, ['div', /Webdriver/i]);
|
|
278
|
-
expect(result.pass).toBe(false);
|
|
279
|
-
expect(getExpectMessage(result.message())).toContain('to have computed role');
|
|
280
|
-
expect(getExpected(result.message())).toContain('/Webdriver/i');
|
|
281
|
-
expect(getExpected(result.message())).toContain('div');
|
|
282
|
-
});
|
|
283
|
-
});
|
|
284
|
-
});
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { $ } from '@wdio/globals';
|
|
2
|
-
import { beforeEach, describe, expect, test, vi } from 'vitest';
|
|
3
|
-
import { getExpectMessage, getExpected, getReceived } from '../../__fixtures__/utils.js';
|
|
4
|
-
import { toHaveElementClass } from '../../../src/matchers/element/toHaveClass.js';
|
|
5
|
-
vi.mock('@wdio/globals');
|
|
6
|
-
describe('toHaveElementClass', () => {
|
|
7
|
-
let el;
|
|
8
|
-
beforeEach(async () => {
|
|
9
|
-
el = await $('sel');
|
|
10
|
-
el.getAttribute = vi.fn().mockImplementation((attribute) => {
|
|
11
|
-
if (attribute === 'class') {
|
|
12
|
-
return 'some-class another-class yet-another-class';
|
|
13
|
-
}
|
|
14
|
-
return null;
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
test('success when class name is present', async () => {
|
|
18
|
-
const beforeAssertion = vi.fn();
|
|
19
|
-
const afterAssertion = vi.fn();
|
|
20
|
-
const result = await toHaveElementClass.call({}, el, 'some-class', { beforeAssertion, afterAssertion });
|
|
21
|
-
expect(result.pass).toBe(true);
|
|
22
|
-
expect(beforeAssertion).toBeCalledWith({
|
|
23
|
-
matcherName: 'toHaveElementClass',
|
|
24
|
-
expectedValue: 'some-class',
|
|
25
|
-
options: { beforeAssertion, afterAssertion }
|
|
26
|
-
});
|
|
27
|
-
expect(afterAssertion).toBeCalledWith({
|
|
28
|
-
matcherName: 'toHaveElementClass',
|
|
29
|
-
expectedValue: 'some-class',
|
|
30
|
-
options: { beforeAssertion, afterAssertion },
|
|
31
|
-
result
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
test('success when including surrounding spaces and asymmetric matcher', async () => {
|
|
35
|
-
const result = await toHaveElementClass.call({}, el, expect.stringContaining('some-class '));
|
|
36
|
-
expect(result.pass).toBe(true);
|
|
37
|
-
const result2 = await toHaveElementClass.call({}, el, expect.stringContaining(' another-class '));
|
|
38
|
-
expect(result2.pass).toBe(true);
|
|
39
|
-
});
|
|
40
|
-
test('success with RegExp when class name is present', async () => {
|
|
41
|
-
const result = await toHaveElementClass.call({}, el, /sOmE-cLaSs/i);
|
|
42
|
-
expect(result.pass).toBe(true);
|
|
43
|
-
});
|
|
44
|
-
test('success if array matches with class', async () => {
|
|
45
|
-
const result = await toHaveElementClass.call({}, el, ['some-class', 'yet-another-class']);
|
|
46
|
-
expect(result.pass).toBe(true);
|
|
47
|
-
});
|
|
48
|
-
test('failure if the classes do not match', async () => {
|
|
49
|
-
const result = await toHaveElementClass.call({}, el, 'someclass', { message: 'Not found!' });
|
|
50
|
-
expect(result.pass).toBe(false);
|
|
51
|
-
expect(getExpectMessage(result.message())).toContain('Not found!');
|
|
52
|
-
});
|
|
53
|
-
test('failure if array does not match with class', async () => {
|
|
54
|
-
const result = await toHaveElementClass.call({}, el, ['someclass', 'anotherclass']);
|
|
55
|
-
expect(result.pass).toBe(false);
|
|
56
|
-
});
|
|
57
|
-
describe('options', () => {
|
|
58
|
-
test('should fail when class is not a string', async () => {
|
|
59
|
-
el.getAttribute = vi.fn().mockImplementation(() => {
|
|
60
|
-
return null;
|
|
61
|
-
});
|
|
62
|
-
const result = await toHaveElementClass.call({}, el, 'some-class');
|
|
63
|
-
expect(result.pass).toBe(false);
|
|
64
|
-
});
|
|
65
|
-
test('should pass when trimming the attribute', async () => {
|
|
66
|
-
el.getAttribute = vi.fn().mockImplementation(() => {
|
|
67
|
-
return ' some-class ';
|
|
68
|
-
});
|
|
69
|
-
const result = await toHaveElementClass.call({}, el, 'some-class', { trim: true });
|
|
70
|
-
expect(result.pass).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
test('should pass when ignore the case', async () => {
|
|
73
|
-
const result = await toHaveElementClass.call({}, el, 'sOme-ClAsS', { ignoreCase: true });
|
|
74
|
-
expect(result.pass).toBe(true);
|
|
75
|
-
});
|
|
76
|
-
test('should pass if containing', async () => {
|
|
77
|
-
const result = await toHaveElementClass.call({}, el, 'some', { containing: true });
|
|
78
|
-
expect(result.pass).toBe(true);
|
|
79
|
-
});
|
|
80
|
-
test('should pass if array ignores the case', async () => {
|
|
81
|
-
const result = await toHaveElementClass.call({}, el, ['sOme-ClAsS', 'anOther-ClAsS'], { ignoreCase: true });
|
|
82
|
-
expect(result.pass).toBe(true);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe('failure when class name is not present', () => {
|
|
86
|
-
let result;
|
|
87
|
-
beforeEach(async () => {
|
|
88
|
-
result = await toHaveElementClass.call({}, el, 'test');
|
|
89
|
-
});
|
|
90
|
-
test('failure', () => {
|
|
91
|
-
expect(result.pass).toBe(false);
|
|
92
|
-
});
|
|
93
|
-
describe('message shows correctly', () => {
|
|
94
|
-
test('expect message', () => {
|
|
95
|
-
expect(getExpectMessage(result.message())).toContain('to have class');
|
|
96
|
-
});
|
|
97
|
-
test('expected message', () => {
|
|
98
|
-
expect(getExpected(result.message())).toContain('test');
|
|
99
|
-
});
|
|
100
|
-
test('received message', () => {
|
|
101
|
-
expect(getReceived(result.message())).toContain('some-class another-class');
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
describe('failure with RegExp when class name is not present', () => {
|
|
106
|
-
let result;
|
|
107
|
-
beforeEach(async () => {
|
|
108
|
-
result = await toHaveElementClass.call({}, el, /WDIO/);
|
|
109
|
-
});
|
|
110
|
-
test('failure', () => {
|
|
111
|
-
expect(result.pass).toBe(false);
|
|
112
|
-
});
|
|
113
|
-
describe('message shows correctly', () => {
|
|
114
|
-
test('expect message', () => {
|
|
115
|
-
expect(getExpectMessage(result.message())).toContain('to have class');
|
|
116
|
-
});
|
|
117
|
-
test('expected message', () => {
|
|
118
|
-
expect(getExpected(result.message())).toContain('/WDIO/');
|
|
119
|
-
});
|
|
120
|
-
test('received message', () => {
|
|
121
|
-
expect(getReceived(result.message())).toContain('some-class another-class');
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
});
|
|
125
|
-
});
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import { vi, test, describe, expect, beforeEach } from 'vitest';
|
|
2
|
-
import { $ } from '@wdio/globals';
|
|
3
|
-
import { getExpectMessage, getExpected, getReceived } from '../../__fixtures__/utils.js';
|
|
4
|
-
import { toHaveElementProperty } from '../../../src/matchers/element/toHaveElementProperty.js';
|
|
5
|
-
vi.mock('@wdio/globals');
|
|
6
|
-
describe('toHaveElementProperty', () => {
|
|
7
|
-
test('ignore case of stringified value', async () => {
|
|
8
|
-
const el = await $('sel');
|
|
9
|
-
el._attempts = 0;
|
|
10
|
-
el._value = function () {
|
|
11
|
-
this._attempts++;
|
|
12
|
-
return 'iphone';
|
|
13
|
-
};
|
|
14
|
-
const beforeAssertion = vi.fn();
|
|
15
|
-
const afterAssertion = vi.fn();
|
|
16
|
-
const result = await toHaveElementProperty.call({}, el, 'property', 'iPhone', { wait: 0, ignoreCase: true, beforeAssertion, afterAssertion });
|
|
17
|
-
expect(result.pass).toBe(true);
|
|
18
|
-
expect(el._attempts).toBe(1);
|
|
19
|
-
expect(beforeAssertion).toBeCalledWith({
|
|
20
|
-
matcherName: 'toHaveElementProperty',
|
|
21
|
-
expectedValue: ['property', 'iPhone'],
|
|
22
|
-
options: { wait: 0, ignoreCase: true, beforeAssertion, afterAssertion }
|
|
23
|
-
});
|
|
24
|
-
expect(afterAssertion).toBeCalledWith({
|
|
25
|
-
matcherName: 'toHaveElementProperty',
|
|
26
|
-
expectedValue: ['property', 'iPhone'],
|
|
27
|
-
options: { wait: 0, ignoreCase: true, beforeAssertion, afterAssertion },
|
|
28
|
-
result
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
test('assymeric match', async () => {
|
|
32
|
-
const el = await $('sel');
|
|
33
|
-
el._value = function () {
|
|
34
|
-
return 'iphone';
|
|
35
|
-
};
|
|
36
|
-
const result = await toHaveElementProperty.call({}, el, 'property', expect.stringContaining('phone'));
|
|
37
|
-
expect(result.pass).toBe(true);
|
|
38
|
-
});
|
|
39
|
-
test('should return false if values dont match', async () => {
|
|
40
|
-
const el = await $('sel');
|
|
41
|
-
el._value = function () {
|
|
42
|
-
return 'iphone';
|
|
43
|
-
};
|
|
44
|
-
const result = await toHaveElementProperty.bind({ isNot: true })(el, 'property', 'foobar', { wait: 1 });
|
|
45
|
-
expect(result.pass).toBe(false);
|
|
46
|
-
});
|
|
47
|
-
test('should return true if values match', async () => {
|
|
48
|
-
const el = await $('sel');
|
|
49
|
-
el._value = function () {
|
|
50
|
-
return 'iphone';
|
|
51
|
-
};
|
|
52
|
-
const result = await toHaveElementProperty.bind({ isNot: true })(el, 'property', 'iphone', { wait: 1 });
|
|
53
|
-
expect(result.pass).toBe(true);
|
|
54
|
-
});
|
|
55
|
-
test('with RegExp should return true if values match', async () => {
|
|
56
|
-
const el = await $('sel');
|
|
57
|
-
el._value = function () {
|
|
58
|
-
return 'iphone';
|
|
59
|
-
};
|
|
60
|
-
const result = await toHaveElementProperty.call({}, el, 'property', /iPhOnE/i);
|
|
61
|
-
expect(result.pass).toBe(true);
|
|
62
|
-
});
|
|
63
|
-
test('should return false for null input', async () => {
|
|
64
|
-
const el = await $('sel');
|
|
65
|
-
el._value = function () {
|
|
66
|
-
return undefined;
|
|
67
|
-
};
|
|
68
|
-
const result = await toHaveElementProperty.bind({ isNot: true })(el, 'property', 'iphone', { wait: 1 });
|
|
69
|
-
expect(result.pass).toBe(false);
|
|
70
|
-
});
|
|
71
|
-
test('should return true if value is null', async () => {
|
|
72
|
-
const el = await $('sel');
|
|
73
|
-
el._value = function () {
|
|
74
|
-
return 'Test Value';
|
|
75
|
-
};
|
|
76
|
-
const result = await toHaveElementProperty.bind({ isNot: true })(el, 'property', null);
|
|
77
|
-
expect(result.pass).toBe(true);
|
|
78
|
-
});
|
|
79
|
-
test('should return false if value is non-string', async () => {
|
|
80
|
-
const el = await $('sel');
|
|
81
|
-
el._value = function () {
|
|
82
|
-
return 5;
|
|
83
|
-
};
|
|
84
|
-
const result = await toHaveElementProperty.bind({ isNot: true })(el, 'property', 'Test Value');
|
|
85
|
-
expect(result.pass).toBe(false);
|
|
86
|
-
});
|
|
87
|
-
describe('failure with RegExp when value does not match', () => {
|
|
88
|
-
let result;
|
|
89
|
-
beforeEach(async () => {
|
|
90
|
-
const el = await $('sel');
|
|
91
|
-
el._value = function () {
|
|
92
|
-
return 'iphone';
|
|
93
|
-
};
|
|
94
|
-
result = await toHaveElementProperty.call({}, el, 'property', /WDIO/);
|
|
95
|
-
});
|
|
96
|
-
test('failure', () => {
|
|
97
|
-
expect(result.pass).toBe(false);
|
|
98
|
-
});
|
|
99
|
-
describe('message shows correctly', () => {
|
|
100
|
-
test('expect message', () => {
|
|
101
|
-
expect(getExpectMessage(result.message())).toContain('to have property');
|
|
102
|
-
});
|
|
103
|
-
test('expected message', () => {
|
|
104
|
-
expect(getExpected(result.message())).toContain('/WDIO/');
|
|
105
|
-
});
|
|
106
|
-
test('received message', () => {
|
|
107
|
-
expect(getReceived(result.message())).toContain('iphone');
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
});
|