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.
Files changed (81) hide show
  1. package/lib/{tsconfig.tsbuildinfo → tsconfig.build.tsbuildinfo} +1 -1
  2. package/package.json +2 -2
  3. package/types/expect-webdriverio.d.ts +27 -38
  4. package/types/standalone.d.ts +0 -2
  5. package/lib/test/__fixtures__/utils.js +0 -19
  6. package/lib/test/index.test.js +0 -8
  7. package/lib/test/matchers/beMatchers.test.js +0 -109
  8. package/lib/test/matchers/browser/toHaveClipboardText.test.js +0 -21
  9. package/lib/test/matchers/browserMatchers.test.js +0 -102
  10. package/lib/test/matchers/element/toBeDisabled.test.js +0 -121
  11. package/lib/test/matchers/element/toHaveAttribute.test.js +0 -131
  12. package/lib/test/matchers/element/toHaveChildren.test.js +0 -62
  13. package/lib/test/matchers/element/toHaveComputedLabel.test.js +0 -284
  14. package/lib/test/matchers/element/toHaveComputedRole.test.js +0 -284
  15. package/lib/test/matchers/element/toHaveElementClass.test.js +0 -125
  16. package/lib/test/matchers/element/toHaveElementProperty.test.js +0 -111
  17. package/lib/test/matchers/element/toHaveHTML.test.js +0 -291
  18. package/lib/test/matchers/element/toHaveHeight.test.js +0 -171
  19. package/lib/test/matchers/element/toHaveHref.test.js +0 -54
  20. package/lib/test/matchers/element/toHaveId.test.js +0 -54
  21. package/lib/test/matchers/element/toHaveSize.test.js +0 -109
  22. package/lib/test/matchers/element/toHaveStyle.test.js +0 -199
  23. package/lib/test/matchers/element/toHaveText.test.js +0 -333
  24. package/lib/test/matchers/element/toHaveValue.test.js +0 -81
  25. package/lib/test/matchers/element/toHaveWidth.test.js +0 -171
  26. package/lib/test/matchers/elements/toBeElementsArrayOfSize.test.js +0 -141
  27. package/lib/test/matchers/mock/toBeRequested.test.js +0 -73
  28. package/lib/test/matchers/mock/toBeRequestedTimes.test.js +0 -108
  29. package/lib/test/matchers/mock/toBeRequestedWith.test.js +0 -343
  30. package/lib/test/matchers.test.js +0 -54
  31. package/lib/test/snapshot.test.js +0 -53
  32. package/lib/test/softAssertions.test.js +0 -332
  33. package/lib/test/util/elementsUtil.test.js +0 -18
  34. package/lib/test/util/formatMessage.test.js +0 -96
  35. package/lib/test/util/refetchElements.test.js +0 -19
  36. package/lib/test/utils.test.js +0 -117
  37. /package/lib/{src/constants.js → constants.js} +0 -0
  38. /package/lib/{src/index.js → index.js} +0 -0
  39. /package/lib/{src/jasmineUtils.js → jasmineUtils.js} +0 -0
  40. /package/lib/{src/matchers → matchers}/browser/toHaveClipboardText.js +0 -0
  41. /package/lib/{src/matchers → matchers}/browser/toHaveTitle.js +0 -0
  42. /package/lib/{src/matchers → matchers}/browser/toHaveUrl.js +0 -0
  43. /package/lib/{src/matchers → matchers}/element/toBeClickable.js +0 -0
  44. /package/lib/{src/matchers → matchers}/element/toBeDisabled.js +0 -0
  45. /package/lib/{src/matchers → matchers}/element/toBeDisplayed.js +0 -0
  46. /package/lib/{src/matchers → matchers}/element/toBeDisplayedInViewport.js +0 -0
  47. /package/lib/{src/matchers → matchers}/element/toBeEnabled.js +0 -0
  48. /package/lib/{src/matchers → matchers}/element/toBeExisting.js +0 -0
  49. /package/lib/{src/matchers → matchers}/element/toBeFocused.js +0 -0
  50. /package/lib/{src/matchers → matchers}/element/toBeSelected.js +0 -0
  51. /package/lib/{src/matchers → matchers}/element/toHaveAttribute.js +0 -0
  52. /package/lib/{src/matchers → matchers}/element/toHaveChildren.js +0 -0
  53. /package/lib/{src/matchers → matchers}/element/toHaveClass.js +0 -0
  54. /package/lib/{src/matchers → matchers}/element/toHaveComputedLabel.js +0 -0
  55. /package/lib/{src/matchers → matchers}/element/toHaveComputedRole.js +0 -0
  56. /package/lib/{src/matchers → matchers}/element/toHaveElementProperty.js +0 -0
  57. /package/lib/{src/matchers → matchers}/element/toHaveHTML.js +0 -0
  58. /package/lib/{src/matchers → matchers}/element/toHaveHeight.js +0 -0
  59. /package/lib/{src/matchers → matchers}/element/toHaveHref.js +0 -0
  60. /package/lib/{src/matchers → matchers}/element/toHaveId.js +0 -0
  61. /package/lib/{src/matchers → matchers}/element/toHaveSize.js +0 -0
  62. /package/lib/{src/matchers → matchers}/element/toHaveStyle.js +0 -0
  63. /package/lib/{src/matchers → matchers}/element/toHaveText.js +0 -0
  64. /package/lib/{src/matchers → matchers}/element/toHaveValue.js +0 -0
  65. /package/lib/{src/matchers → matchers}/element/toHaveWidth.js +0 -0
  66. /package/lib/{src/matchers → matchers}/elements/toBeElementsArrayOfSize.js +0 -0
  67. /package/lib/{src/matchers → matchers}/mock/toBeRequested.js +0 -0
  68. /package/lib/{src/matchers → matchers}/mock/toBeRequestedTimes.js +0 -0
  69. /package/lib/{src/matchers → matchers}/mock/toBeRequestedWith.js +0 -0
  70. /package/lib/{src/matchers → matchers}/snapshot.js +0 -0
  71. /package/lib/{src/matchers.js → matchers.js} +0 -0
  72. /package/lib/{src/snapshot.js → snapshot.js} +0 -0
  73. /package/lib/{src/softAssert.js → softAssert.js} +0 -0
  74. /package/lib/{src/softAssertService.js → softAssertService.js} +0 -0
  75. /package/lib/{src/softExpect.js → softExpect.js} +0 -0
  76. /package/lib/{src/types.js → types.js} +0 -0
  77. /package/lib/{src/util → util}/elementsUtil.js +0 -0
  78. /package/lib/{src/util → util}/executeCommand.js +0 -0
  79. /package/lib/{src/util → util}/formatMessage.js +0 -0
  80. /package/lib/{src/util → util}/refetchElements.js +0 -0
  81. /package/lib/{src/utils.js → utils.js} +0 -0
@@ -1,291 +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 { toHaveHTML } from '../../../src/matchers/element/toHaveHTML.js';
5
- vi.mock('@wdio/globals');
6
- describe('toHaveHTML', () => {
7
- test('wait for success', async () => {
8
- const el = await $('sel');
9
- el._attempts = 2;
10
- el._html = function () {
11
- if (this._attempts > 0) {
12
- this._attempts--;
13
- return '';
14
- }
15
- return '<div>foo</div>';
16
- };
17
- const beforeAssertion = vi.fn();
18
- const afterAssertion = vi.fn();
19
- const result = await toHaveHTML.call({}, el, '<div>foo</div>', { ignoreCase: true, beforeAssertion, afterAssertion });
20
- expect(result.pass).toBe(true);
21
- expect(el._attempts).toBe(0);
22
- expect(beforeAssertion).toBeCalledWith({
23
- matcherName: 'toHaveHTML',
24
- expectedValue: '<div>foo</div>',
25
- options: { ignoreCase: true, beforeAssertion, afterAssertion }
26
- });
27
- expect(afterAssertion).toBeCalledWith({
28
- matcherName: 'toHaveHTML',
29
- expectedValue: '<div>foo</div>',
30
- options: { ignoreCase: true, beforeAssertion, afterAssertion },
31
- result
32
- });
33
- });
34
- test('wait but failure', async () => {
35
- const el = await $('sel');
36
- el._html = function () {
37
- throw new Error('some error');
38
- };
39
- await expect(() => toHaveHTML.call({}, el, '<div>foo</div>', { 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._html = function () {
46
- this._attempts++;
47
- return '<div>foo</div>';
48
- };
49
- const result = await toHaveHTML.call({}, el, '<div>foo</div>', { 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._html = function () {
57
- this._attempts++;
58
- return '<div>foo</div>';
59
- };
60
- const result = await toHaveHTML.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._html = function () {
68
- this._attempts++;
69
- return '<div>foo</div>';
70
- };
71
- const result = await toHaveHTML.call({}, el, '<div>foo</div>', { 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._html = function () {
78
- return '<div>foo</div>';
79
- };
80
- const result = await toHaveHTML.call({ isNot: true }, el, '<div>foo</div>', { 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 htmls don't match", async () => {
86
- const el = await $('sel');
87
- el._html = function () {
88
- return '<div>foo</div>';
89
- };
90
- const result = await toHaveHTML.bind({ isNot: true })(el, 'foobar', { wait: 1 });
91
- expect(result.pass).toBe(false);
92
- });
93
- test('should return true if htmls match', async () => {
94
- const el = await $('sel');
95
- el._html = function () {
96
- return '<div>foo</div>';
97
- };
98
- const result = await toHaveHTML.bind({ isNot: true })(el, '<div>foo</div>', { wait: 1 });
99
- expect(result.pass).toBe(true);
100
- });
101
- test('should return true if actual html + single replacer matches the expected html', async () => {
102
- const el = await $('sel');
103
- el._html = function () {
104
- return '<div>foo</div>';
105
- };
106
- const result = await toHaveHTML.bind({})(el, '<div>bar</div>', { replace: ['foo', 'bar'] });
107
- expect(result.pass).toBe(true);
108
- });
109
- test('should return true if actual html + replace (string) matches the expected html', async () => {
110
- const el = await $('sel');
111
- el._html = function () {
112
- return '<div>foo</div>';
113
- };
114
- const result = await toHaveHTML.bind({})(el, '<div>bar</div>', { replace: [['foo', 'bar']] });
115
- expect(result.pass).toBe(true);
116
- });
117
- test('should return true if actual html + replace (regex) matches the expected html', async () => {
118
- const el = await $('sel');
119
- el._html = function () {
120
- return '<div>foo</div>';
121
- };
122
- const result = await toHaveHTML.bind({})(el, '<div>bar</div>', { replace: [[/foo/, 'bar']] });
123
- expect(result.pass).toBe(true);
124
- });
125
- test('should return true if actual html starts with expected html', async () => {
126
- const el = await $('sel');
127
- el._html = function () {
128
- return '<div>foo</div>';
129
- };
130
- const result = await toHaveHTML.bind({})(el, '<div>', { atStart: true });
131
- expect(result.pass).toBe(true);
132
- });
133
- test('should return true if actual html ends with expected html', async () => {
134
- const el = await $('sel');
135
- el._html = function () {
136
- return '<div>foo</div>';
137
- };
138
- const result = await toHaveHTML.bind({})(el, '</div>', { atEnd: true });
139
- expect(result.pass).toBe(true);
140
- });
141
- test('should return true if actual html contains the expected html at the given index', async () => {
142
- const el = await $('sel');
143
- el._html = function () {
144
- return '<div>foo</div>';
145
- };
146
- const result = await toHaveHTML.bind({})(el, 'iv>foo', { atIndex: 2 });
147
- expect(result.pass).toBe(true);
148
- });
149
- test('should return true if actual html equals the expected html with includeSelectorTag set to false', async () => {
150
- const el = await $('sel');
151
- el._html = function (includeSelectorTag) {
152
- return includeSelectorTag ? '<div><div>foo</div></div>' : '<div>foo</div>';
153
- };
154
- const result = await toHaveHTML.bind({})(el, '<div>foo</div>', { includeSelectorTag: false });
155
- expect(result.pass).toBe(true);
156
- });
157
- test('should return true if actual html equals the expected html with includeSelectorTag set to false', async () => {
158
- const el = await $('sel');
159
- el._html = function (includeSelectorTag) {
160
- return includeSelectorTag ? '<div><div>foo</div></div>' : '<div>foo</div>';
161
- };
162
- const result = await toHaveHTML.bind({})(el, '<div><div>foo</div></div>', {
163
- includeSelectorTag: true,
164
- });
165
- expect(result.pass).toBe(true);
166
- });
167
- test('message', async () => {
168
- const el = await $('sel');
169
- el._html = function () {
170
- return '';
171
- };
172
- const result = await toHaveHTML.call({}, el, '<div>foo</div>');
173
- expect(getExpectMessage(result.message())).toContain('to have HTML');
174
- });
175
- test('success if array matches with html and ignoreCase', async () => {
176
- const el = await $('sel');
177
- el._attempts = 0;
178
- el._html = function () {
179
- this._attempts++;
180
- return '<div>foo</div>';
181
- };
182
- const result = await toHaveHTML.call({}, el, ['div', '<div>foo</div>'], { ignoreCase: true });
183
- expect(result.pass).toBe(true);
184
- expect(el._attempts).toBe(1);
185
- });
186
- test('success if array matches with html and trim', async () => {
187
- const el = await $('sel');
188
- el._attempts = 0;
189
- el._html = function () {
190
- this._attempts++;
191
- return ' <div>foo</div> ';
192
- };
193
- const result = await toHaveHTML.call({}, el, ['div', '<div>foo</div>', 'toto'], { trim: true });
194
- expect(result.pass).toBe(true);
195
- expect(el._attempts).toBe(1);
196
- });
197
- test('success if array matches with html and replace (string)', async () => {
198
- const el = await $('sel');
199
- el._attempts = 0;
200
- el._html = function () {
201
- this._attempts++;
202
- return '<div>foo</div>';
203
- };
204
- const result = await toHaveHTML.call({}, el, ['div', '<div>foo</div>', 'toto'], {
205
- replace: [['Web', 'Browser']],
206
- });
207
- expect(result.pass).toBe(true);
208
- expect(el._attempts).toBe(1);
209
- });
210
- test('success if array matches with html and replace (regex)', async () => {
211
- const el = await $('sel');
212
- el._attempts = 0;
213
- el._html = function () {
214
- this._attempts++;
215
- return '<div>foo</div>';
216
- };
217
- const result = await toHaveHTML.call({}, el, ['div', '<div>foo</div>', 'toto'], {
218
- replace: [[/Web/g, 'Browser']],
219
- });
220
- expect(result.pass).toBe(true);
221
- expect(el._attempts).toBe(1);
222
- });
223
- test('success if array matches with html and multiple replacers and one of the replacers is a function', async () => {
224
- const el = await $('sel');
225
- el._attempts = 0;
226
- el._html = function () {
227
- this._attempts++;
228
- return '<div>FOO</div>';
229
- };
230
- const result = await toHaveHTML.call({}, el, ['div', '<p>foo</p>', 'toto'], {
231
- replace: [
232
- [/div/g, 'p'],
233
- [/[A-Z]/g, (match) => match.toLowerCase()],
234
- ],
235
- });
236
- expect(result.pass).toBe(true);
237
- expect(el._attempts).toBe(1);
238
- });
239
- test('failure if array does not match with html', async () => {
240
- const el = await $('sel');
241
- el._attempts = 0;
242
- el._html = function () {
243
- this._attempts++;
244
- return '<div>foo</div>';
245
- };
246
- const result = await toHaveHTML.call({}, el, ['div', 'foo'], { wait: 1 });
247
- expect(result.pass).toBe(false);
248
- expect(el._attempts).toBe(1);
249
- });
250
- describe('with RegExp', () => {
251
- let el;
252
- beforeEach(async () => {
253
- el = await $('sel');
254
- el._html = vi.fn().mockImplementation(() => {
255
- return 'This is example HTML';
256
- });
257
- });
258
- test('success if match', async () => {
259
- const result = await toHaveHTML.call({}, el, /ExAmplE/i);
260
- expect(result.pass).toBe(true);
261
- });
262
- test('success if array matches with RegExp', async () => {
263
- const result = await toHaveHTML.call({}, el, ['div', /ExAmPlE/i]);
264
- expect(result.pass).toBe(true);
265
- });
266
- test('success if array matches with html', async () => {
267
- const result = await toHaveHTML.call({}, el, ['This is example HTML', /Webdriver/i]);
268
- expect(result.pass).toBe(true);
269
- });
270
- test('success if array matches with html and ignoreCase', async () => {
271
- const result = await toHaveHTML.call({}, el, ['ThIs Is ExAmPlE HTML', /Webdriver/i], {
272
- ignoreCase: true,
273
- });
274
- expect(result.pass).toBe(true);
275
- });
276
- test('failure if no match', async () => {
277
- const result = await toHaveHTML.call({}, el, /Webdriver/i);
278
- expect(result.pass).toBe(false);
279
- expect(getExpectMessage(result.message())).toContain('to have HTML');
280
- expect(getExpected(result.message())).toContain('/Webdriver/i');
281
- expect(getReceived(result.message())).toContain('This is example HTML');
282
- });
283
- test('failure if array does not match with html', async () => {
284
- const result = await toHaveHTML.call({}, el, ['div', /Webdriver/i]);
285
- expect(result.pass).toBe(false);
286
- expect(getExpectMessage(result.message())).toContain('to have HTML');
287
- expect(getExpected(result.message())).toContain('/Webdriver/i');
288
- expect(getExpected(result.message())).toContain('div');
289
- });
290
- });
291
- });
@@ -1,171 +0,0 @@
1
- import { vi, test, describe, expect } from 'vitest';
2
- import { $ } from '@wdio/globals';
3
- import { getExpectMessage, getReceived } from '../../__fixtures__/utils.js';
4
- import { toHaveHeight } from '../../../src/matchers/element/toHaveHeight.js';
5
- vi.mock('@wdio/globals');
6
- describe('toHaveHeight', () => {
7
- test('wait for success', async () => {
8
- const el = await $('sel');
9
- el._attempts = 2;
10
- el._size = function (property) {
11
- if (this._attempts > 0) {
12
- this._attempts--;
13
- return null;
14
- }
15
- if (property === 'width') {
16
- return 50;
17
- }
18
- if (property === 'height') {
19
- return 32;
20
- }
21
- return { width: 50, height: 32 };
22
- };
23
- const beforeAssertion = vi.fn();
24
- const afterAssertion = vi.fn();
25
- const result = await toHaveHeight.call({}, el, 32, { beforeAssertion, afterAssertion });
26
- expect(result.pass).toBe(true);
27
- expect(el._attempts).toBe(0);
28
- expect(beforeAssertion).toBeCalledWith({
29
- matcherName: 'toHaveHeight',
30
- expectedValue: 32,
31
- options: { beforeAssertion, afterAssertion }
32
- });
33
- expect(afterAssertion).toBeCalledWith({
34
- matcherName: 'toHaveHeight',
35
- expectedValue: 32,
36
- options: { beforeAssertion, afterAssertion },
37
- result
38
- });
39
- });
40
- test('wait but failure', async () => {
41
- const el = await $('sel');
42
- el._size = function () {
43
- throw new Error('some error');
44
- };
45
- await expect(() => toHaveHeight.call({}, el, 10, {}))
46
- .rejects.toThrow('some error');
47
- });
48
- test('success on the first attempt', async () => {
49
- const el = await $('sel');
50
- el._attempts = 0;
51
- el._size = function (property) {
52
- this._attempts++;
53
- if (property === 'width') {
54
- return 50;
55
- }
56
- if (property === 'height') {
57
- return 32;
58
- }
59
- return { width: 50, height: 32 };
60
- };
61
- const result = await toHaveHeight.call({}, el, 32, {});
62
- expect(result.message()).toEqual('Expect $(`sel`) to have height\n\nExpected: 32\nReceived: serializes to the same string');
63
- expect(result.pass).toBe(true);
64
- expect(el._attempts).toBe(1);
65
- });
66
- test('no wait - failure', async () => {
67
- const el = await $('sel');
68
- el._attempts = 0;
69
- el._size = function (property) {
70
- this._attempts++;
71
- if (property === 'width') {
72
- return 50;
73
- }
74
- if (property === 'height') {
75
- return 32;
76
- }
77
- return { width: 50, height: 32 };
78
- };
79
- const result = await toHaveHeight.call({}, el, 10, { wait: 0 });
80
- expect(result.message()).toEqual('Expect $(`sel`) to have height\n\nExpected: 10\nReceived: 32');
81
- expect(result.pass).toBe(false);
82
- expect(el._attempts).toBe(1);
83
- });
84
- test('no wait - success', async () => {
85
- const el = await $('sel');
86
- el._attempts = 0;
87
- el._size = function (property) {
88
- this._attempts++;
89
- if (property === 'width') {
90
- return 50;
91
- }
92
- if (property === 'height') {
93
- return 32;
94
- }
95
- return { width: 50, height: 32 };
96
- };
97
- const result = await toHaveHeight.call({}, el, 32, { wait: 0 });
98
- expect(result.pass).toBe(true);
99
- expect(el._attempts).toBe(1);
100
- });
101
- test('gte and lte', async () => {
102
- const el = await $('sel');
103
- el._attempts = 0;
104
- el._size = function (property) {
105
- this._attempts++;
106
- if (property === 'width') {
107
- return 50;
108
- }
109
- if (property === 'height') {
110
- return 32;
111
- }
112
- return { width: 50, height: 32 };
113
- };
114
- const result = await toHaveHeight.call({}, el, { gte: 31, lte: 33 }, { wait: 0 });
115
- expect(result.message()).toEqual('Expect $(`sel`) to have height\n\nExpected: ">= 31 && <= 33"\nReceived: 32');
116
- expect(result.pass).toBe(true);
117
- expect(el._attempts).toBe(1);
118
- });
119
- test('not - failure', async () => {
120
- const el = await $('sel');
121
- el._size = function (property) {
122
- if (property === 'width') {
123
- return 50;
124
- }
125
- if (property === 'height') {
126
- return 32;
127
- }
128
- return { width: 50, height: 32 };
129
- };
130
- const result = await toHaveHeight.call({}, el, 32, { wait: 0 });
131
- const received = getReceived(result.message());
132
- expect(received).not.toContain('not');
133
- expect(result.pass).toBe(true);
134
- });
135
- test("should return false if sizes don't match", async () => {
136
- const el = await $('sel');
137
- el._size = function (property) {
138
- if (property === 'width') {
139
- return 50;
140
- }
141
- if (property === 'height') {
142
- return 32;
143
- }
144
- return { width: 50, height: 32 };
145
- };
146
- const result = await toHaveHeight.bind({})(el, 10, { wait: 1 });
147
- expect(result.pass).toBe(false);
148
- });
149
- test('should return true if sizes match', async () => {
150
- const el = await $('sel');
151
- el._size = function (property) {
152
- if (property === 'width') {
153
- return 50;
154
- }
155
- if (property === 'height') {
156
- return 32;
157
- }
158
- return { width: 50, height: 32 };
159
- };
160
- const result = await toHaveHeight.bind({})(el, 32, { wait: 1 });
161
- expect(result.pass).toBe(true);
162
- });
163
- test('message', async () => {
164
- const el = await $('sel');
165
- el._size = function () {
166
- return null;
167
- };
168
- const result = await toHaveHeight.call({}, el, 50);
169
- expect(getExpectMessage(result.message())).toContain('to have height');
170
- });
171
- });
@@ -1,54 +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 { toHaveHref } from '../../../src/matchers/element/toHaveHref.js';
5
- vi.mock('@wdio/globals');
6
- describe('toHaveHref', () => {
7
- let el;
8
- beforeEach(async () => {
9
- el = await $('sel');
10
- el.getAttribute = vi.fn().mockImplementation((attribute) => {
11
- if (attribute === 'href') {
12
- return 'https://www.example.com';
13
- }
14
- return null;
15
- });
16
- });
17
- test('success when contains', async () => {
18
- const beforeAssertion = vi.fn();
19
- const afterAssertion = vi.fn();
20
- const result = await toHaveHref.call({}, el, 'https://www.example.com', { beforeAssertion, afterAssertion });
21
- expect(result.pass).toBe(true);
22
- expect(beforeAssertion).toBeCalledWith({
23
- matcherName: 'toHaveHref',
24
- expectedValue: 'https://www.example.com',
25
- options: { beforeAssertion, afterAssertion }
26
- });
27
- expect(afterAssertion).toBeCalledWith({
28
- matcherName: 'toHaveHref',
29
- expectedValue: 'https://www.example.com',
30
- options: { beforeAssertion, afterAssertion },
31
- result
32
- });
33
- });
34
- describe('failure when doesnt contain', () => {
35
- let result;
36
- beforeEach(async () => {
37
- result = await toHaveHref.call({}, el, 'an href');
38
- });
39
- test('failure', () => {
40
- expect(result.pass).toBe(false);
41
- });
42
- describe('message shows correctly', () => {
43
- test('expect message', () => {
44
- expect(getExpectMessage(result.message())).toContain('to have attribute href');
45
- });
46
- test('expected message', () => {
47
- expect(getExpected(result.message())).toContain('an href');
48
- });
49
- test('received message', () => {
50
- expect(getReceived(result.message())).toContain('https://www.example.com');
51
- });
52
- });
53
- });
54
- });
@@ -1,54 +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 { toHaveId } from '../../../src/matchers/element/toHaveId.js';
5
- vi.mock('@wdio/globals');
6
- describe('toHaveId', () => {
7
- let el;
8
- beforeEach(async () => {
9
- el = await $('sel');
10
- el.getAttribute = vi.fn().mockImplementation((attribute) => {
11
- if (attribute === 'id') {
12
- return 'test id';
13
- }
14
- return null;
15
- });
16
- });
17
- test('success', async () => {
18
- const result = await toHaveId.call({}, el, 'test id');
19
- expect(result.pass).toBe(true);
20
- });
21
- describe('failure', () => {
22
- let result;
23
- const beforeAssertion = vi.fn();
24
- const afterAssertion = vi.fn();
25
- beforeEach(async () => {
26
- result = await toHaveId.call({}, el, 'an attribute', { beforeAssertion, afterAssertion });
27
- });
28
- test('failure', () => {
29
- expect(beforeAssertion).toBeCalledWith({
30
- matcherName: 'toHaveId',
31
- expectedValue: 'an attribute',
32
- options: { beforeAssertion, afterAssertion }
33
- });
34
- expect(result.pass).toBe(false);
35
- expect(afterAssertion).toBeCalledWith({
36
- matcherName: 'toHaveId',
37
- expectedValue: 'an attribute',
38
- options: { beforeAssertion, afterAssertion },
39
- result
40
- });
41
- });
42
- describe('message shows correctly', () => {
43
- test('expect message', () => {
44
- expect(getExpectMessage(result.message())).toContain('to have attribute id');
45
- });
46
- test('expected message', () => {
47
- expect(getExpected(result.message())).toContain('an attribute');
48
- });
49
- test('received message', () => {
50
- expect(getReceived(result.message())).toContain('test id');
51
- });
52
- });
53
- });
54
- });
@@ -1,109 +0,0 @@
1
- import { vi, test, describe, expect } from 'vitest';
2
- import { $ } from '@wdio/globals';
3
- import { getExpectMessage, getReceived } from '../../__fixtures__/utils.js';
4
- import { toHaveSize } from '../../../src/matchers/element/toHaveSize.js';
5
- vi.mock('@wdio/globals');
6
- describe('toHaveSize', () => {
7
- test('wait for success', async () => {
8
- const el = await $('sel');
9
- el._attempts = 2;
10
- el._size = function () {
11
- if (this._attempts > 0) {
12
- this._attempts--;
13
- return null;
14
- }
15
- return { width: 32, height: 32 };
16
- };
17
- const beforeAssertion = vi.fn();
18
- const afterAssertion = vi.fn();
19
- const result = await toHaveSize.call({}, el, { width: 32, height: 32 }, { beforeAssertion, afterAssertion });
20
- expect(result.pass).toBe(true);
21
- expect(el._attempts).toBe(0);
22
- expect(beforeAssertion).toBeCalledWith({
23
- matcherName: 'toHaveSize',
24
- expectedValue: { width: 32, height: 32 },
25
- options: { beforeAssertion, afterAssertion }
26
- });
27
- expect(afterAssertion).toBeCalledWith({
28
- matcherName: 'toHaveSize',
29
- expectedValue: { width: 32, height: 32 },
30
- options: { beforeAssertion, afterAssertion },
31
- result
32
- });
33
- });
34
- test('wait but failure', async () => {
35
- const el = await $('sel');
36
- el._size = function () {
37
- throw new Error('some error');
38
- };
39
- await expect(() => toHaveSize.call({}, el, { width: 32, height: 32 }, {}))
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._size = function () {
46
- this._attempts++;
47
- return { width: 32, height: 32 };
48
- };
49
- const result = await toHaveSize.call({}, el, { width: 32, height: 32 }, {});
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._size = function () {
57
- this._attempts++;
58
- return { width: 32, height: 32 };
59
- };
60
- const result = await toHaveSize.call({}, el, { width: 15, height: 32 }, { 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._size = function () {
68
- this._attempts++;
69
- return { width: 32, height: 32 };
70
- };
71
- const result = await toHaveSize.call({}, el, { width: 32, height: 32 }, { 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._size = function () {
78
- return { width: 32, height: 32 };
79
- };
80
- const result = await toHaveSize.call({}, el, { width: 32, height: 32 }, { 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 sizes don't match", async () => {
86
- const el = await $('sel');
87
- el._size = function () {
88
- return { width: 32, height: 32 };
89
- };
90
- const result = await toHaveSize.bind({})(el, { width: 15, height: 32 }, { wait: 1 });
91
- expect(result.pass).toBe(false);
92
- });
93
- test('should return true if sizes match', async () => {
94
- const el = await $('sel');
95
- el._size = function () {
96
- return { width: 32, height: 32 };
97
- };
98
- const result = await toHaveSize.bind({})(el, { width: 32, height: 32 }, { wait: 1 });
99
- expect(result.pass).toBe(true);
100
- });
101
- test('message', async () => {
102
- const el = await $('sel');
103
- el._size = function () {
104
- return null;
105
- };
106
- const result = await toHaveSize.call({}, el, { width: 32, height: 32 });
107
- expect(getExpectMessage(result.message())).toContain('to have size');
108
- });
109
- });