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,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
- });