cypress 10.3.1 → 10.4.0
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/exec/open.js +6 -0
- package/mount-utils/CHANGELOG.md +0 -1
- package/mount-utils/README.md +7 -0
- package/package.json +10 -5
- package/react/CHANGELOG.md +0 -19
- package/react/README.md +28 -323
- package/react/dist/createMount.d.ts +30 -0
- package/react/dist/cypress-react.cjs.js +59 -78
- package/react/dist/cypress-react.esm-bundler.js +51 -74
- package/react/dist/getDisplayName.d.ts +1 -1
- package/react/dist/index.d.ts +2 -0
- package/react/dist/mount.d.ts +5 -141
- package/react/dist/types.d.ts +50 -0
- package/react/package.json +1 -5
- package/react18/dist/cypress-react.cjs.js +422 -0
- package/react18/dist/cypress-react.esm-bundler.js +394 -0
- package/react18/dist/index.d.ts +5 -0
- package/react18/package.json +59 -0
- package/types/cypress.d.ts +9 -0
- package/types/index.d.ts +1 -1
- package/types/{net-stubbing.ts → net-stubbing.d.ts} +0 -0
- package/vue/CHANGELOG.md +2 -17
- package/vue/README.md +17 -608
- package/vue/dist/@vue/test-utils/baseWrapper.d.ts +3 -1
- package/vue/dist/@vue/test-utils/config.d.ts +4 -2
- package/vue/dist/@vue/test-utils/emit.d.ts +1 -0
- package/vue/dist/@vue/test-utils/index.d.ts +2 -1
- package/vue/dist/@vue/test-utils/interfaces/wrapperLike.d.ts +2 -2
- package/vue/dist/@vue/test-utils/mount.d.ts +2 -0
- package/vue/dist/@vue/test-utils/stubs.d.ts +2 -6
- package/vue/dist/@vue/test-utils/types.d.ts +1 -1
- package/vue/dist/@vue/test-utils/vueWrapper.d.ts +2 -1
- package/vue/dist/cypress-vue.cjs.js +5379 -5090
- package/vue/dist/cypress-vue.esm-bundler.js +5380 -5091
- package/vue/dist/index.d.ts +1 -0
- package/vue/package.json +2 -2
- package/vue2/README.md +11 -627
- package/vue2/dist/cypress-vue2.browser.js +251 -260
- package/vue2/dist/cypress-vue2.cjs.js +250 -259
- package/vue2/dist/cypress-vue2.esm-bundler.js +248 -257
- package/react/dist/cypress-react.browser.js +0 -512
@@ -12,6 +12,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
12
12
|
var React = require('react');
|
13
13
|
var ReactDOM = require('react-dom');
|
14
14
|
|
15
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
16
|
+
|
15
17
|
function _interopNamespace(e) {
|
16
18
|
if (e && e.__esModule) return e;
|
17
19
|
var n = Object.create(null);
|
@@ -31,7 +33,7 @@ function _interopNamespace(e) {
|
|
31
33
|
}
|
32
34
|
|
33
35
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
34
|
-
var
|
36
|
+
var ReactDOM__default = /*#__PURE__*/_interopDefaultLegacy(ReactDOM);
|
35
37
|
|
36
38
|
/******************************************************************************
|
37
39
|
Copyright (c) Microsoft Corporation.
|
@@ -255,37 +257,21 @@ var injectStyles = function (options) {
|
|
255
257
|
return injectStylesBeforeElement(options, document, el);
|
256
258
|
};
|
257
259
|
};
|
260
|
+
exports.lastMountedReactDom = void 0;
|
258
261
|
/**
|
259
|
-
*
|
260
|
-
*
|
261
|
-
*
|
262
|
-
*
|
263
|
-
*
|
264
|
-
*
|
265
|
-
*
|
266
|
-
* @example
|
267
|
-
```
|
268
|
-
import Hello from './hello.jsx'
|
269
|
-
import { mount } from '@cypress/react'
|
270
|
-
it('works', () => {
|
271
|
-
mount(<Hello onClick={cy.stub()} />)
|
272
|
-
// use Cypress commands
|
273
|
-
cy.contains('Hello').click()
|
274
|
-
})
|
275
|
-
```
|
276
|
-
**/
|
277
|
-
var mount = function (jsx, options) {
|
278
|
-
if (options === void 0) { options = {}; }
|
279
|
-
return _mount('mount', jsx, options);
|
280
|
-
};
|
281
|
-
var lastMountedReactDom;
|
282
|
-
/**
|
283
|
-
* @see `mount`
|
284
|
-
* @param type The type of mount executed
|
285
|
-
* @param rerenderKey If specified, use the provided key rather than generating a new one
|
262
|
+
* Create an `mount` function. Performs all the non-React-version specific
|
263
|
+
* behavior related to mounting. The React-version-specific code
|
264
|
+
* is injected. This helps us to maintain a consistent public API
|
265
|
+
* and handle breaking changes in React's rendering API.
|
266
|
+
*
|
267
|
+
* This is designed to be consumed by `npm/react{16,17,18}`, and other React adapters,
|
268
|
+
* or people writing adapters for third-party, custom adapters.
|
286
269
|
*/
|
287
|
-
var
|
270
|
+
var makeMountFn = function (type, jsx, options, rerenderKey, internalMountOptions) {
|
288
271
|
if (options === void 0) { options = {}; }
|
272
|
+
if (!internalMountOptions) {
|
273
|
+
throw Error('internalMountOptions must be provided with `render` and `reactDom` parameters');
|
274
|
+
}
|
289
275
|
// Get the display name property via the component constructor
|
290
276
|
// @ts-ignore FIXME
|
291
277
|
var componentName = getDisplayName(jsx.type, options.alias);
|
@@ -298,8 +284,8 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
298
284
|
.then(injectStyles(options))
|
299
285
|
.then(function () {
|
300
286
|
var _a, _b, _c;
|
301
|
-
var reactDomToUse =
|
302
|
-
lastMountedReactDom = reactDomToUse;
|
287
|
+
var reactDomToUse = internalMountOptions.reactDom;
|
288
|
+
exports.lastMountedReactDom = reactDomToUse;
|
303
289
|
var el = getContainerEl();
|
304
290
|
if (!el) {
|
305
291
|
throw new Error([
|
@@ -316,7 +302,7 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
316
302
|
// since we always surround the component with a fragment
|
317
303
|
// let's get back the original component
|
318
304
|
var userComponent = reactComponent.props.children;
|
319
|
-
|
305
|
+
internalMountOptions.render(reactComponent, el, reactDomToUse);
|
320
306
|
if (options.log !== false) {
|
321
307
|
Cypress.log({
|
322
308
|
name: type,
|
@@ -341,8 +327,8 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
341
327
|
.then(function () {
|
342
328
|
return cy.wrap({
|
343
329
|
component: userComponent,
|
344
|
-
rerender: function (newComponent) { return
|
345
|
-
unmount:
|
330
|
+
rerender: function (newComponent) { return makeMountFn('rerender', newComponent, options, key, internalMountOptions); },
|
331
|
+
unmount: internalMountOptions.unmount,
|
346
332
|
}, { log: false });
|
347
333
|
})
|
348
334
|
// by waiting, we delaying test execution for the next tick of event loop
|
@@ -353,32 +339,19 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
353
339
|
});
|
354
340
|
};
|
355
341
|
/**
|
356
|
-
*
|
357
|
-
*
|
358
|
-
*
|
359
|
-
*
|
360
|
-
*
|
361
|
-
```
|
362
|
-
import { mount, unmount } from '@cypress/react'
|
363
|
-
it('works', () => {
|
364
|
-
mount(...)
|
365
|
-
// interact with the component using Cypress commands
|
366
|
-
// whenever you want to unmount
|
367
|
-
unmount()
|
368
|
-
})
|
369
|
-
```
|
342
|
+
* Create an `unmount` function. Performs all the non-React-version specific
|
343
|
+
* behavior related to unmounting.
|
344
|
+
*
|
345
|
+
* This is designed to be consumed by `npm/react{16,17,18}`, and other React adapters,
|
346
|
+
* or people writing adapters for third-party, custom adapters.
|
370
347
|
*/
|
371
|
-
|
372
|
-
var unmount = function (options) {
|
373
|
-
if (options === void 0) { options = { log: true }; }
|
374
|
-
return _unmount(options);
|
375
|
-
};
|
376
|
-
var _unmount = function (options) {
|
348
|
+
var makeUnmountFn = function (options, internalUnmountOptions) {
|
377
349
|
return cy.then(function () {
|
378
350
|
return cy.get(ROOT_SELECTOR, { log: false }).then(function ($el) {
|
379
351
|
var _a;
|
380
|
-
if (lastMountedReactDom) {
|
381
|
-
|
352
|
+
if (exports.lastMountedReactDom) {
|
353
|
+
internalUnmountOptions.unmount($el[0]);
|
354
|
+
var wasUnmounted = internalUnmountOptions.unmount($el[0]);
|
382
355
|
if (wasUnmounted && options.log) {
|
383
356
|
Cypress.log({
|
384
357
|
name: 'unmount',
|
@@ -402,32 +375,17 @@ var _unmount = function (options) {
|
|
402
375
|
// we are not in the context of a test
|
403
376
|
var preMountCleanup = function () {
|
404
377
|
var el = getContainerEl();
|
405
|
-
if (el && lastMountedReactDom) {
|
406
|
-
lastMountedReactDom.unmountComponentAtNode(el);
|
378
|
+
if (el && exports.lastMountedReactDom) {
|
379
|
+
exports.lastMountedReactDom.unmountComponentAtNode(el);
|
407
380
|
}
|
408
381
|
};
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
* @returns new instance of `mount` with assigned options
|
414
|
-
* @example
|
415
|
-
* ```
|
416
|
-
* import Hello from './hello.jsx'
|
417
|
-
* import { createMount } from '@cypress/react'
|
418
|
-
*
|
419
|
-
* const mount = createMount({ strict: true, cssFile: 'path/to/any/css/file.css' })
|
420
|
-
*
|
421
|
-
* it('works', () => {
|
422
|
-
* mount(<Hello />)
|
423
|
-
* // use Cypress commands
|
424
|
-
* cy.get('button').should('have.css', 'color', 'rgb(124, 12, 109)')
|
425
|
-
* })
|
426
|
-
```
|
427
|
-
**/
|
382
|
+
var _mount = function (jsx, options) {
|
383
|
+
if (options === void 0) { options = {}; }
|
384
|
+
return makeMountFn('mount', jsx, options);
|
385
|
+
};
|
428
386
|
var createMount = function (defaultOptions) {
|
429
387
|
return function (element, options) {
|
430
|
-
return
|
388
|
+
return _mount(element, __assign(__assign({}, defaultOptions), options));
|
431
389
|
};
|
432
390
|
};
|
433
391
|
// Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
|
@@ -443,6 +401,27 @@ var createMount = function (defaultOptions) {
|
|
443
401
|
// @see npm/react/cypress/component/advanced/set-timeout-example/loading-indicator-spec.js
|
444
402
|
setupHooks(preMountCleanup);
|
445
403
|
|
404
|
+
function mount(jsx, options, rerenderKey) {
|
405
|
+
if (options === void 0) { options = {}; }
|
406
|
+
var internalOptions = {
|
407
|
+
reactDom: ReactDOM__default["default"],
|
408
|
+
render: function (reactComponent, el, reactDomToUse) {
|
409
|
+
return (reactDomToUse || ReactDOM__default["default"]).render(reactComponent, el);
|
410
|
+
},
|
411
|
+
unmount: unmount,
|
412
|
+
};
|
413
|
+
return makeMountFn('mount', jsx, __assign({ ReactDom: ReactDOM__default["default"] }, options), rerenderKey, internalOptions);
|
414
|
+
}
|
415
|
+
function unmount(options) {
|
416
|
+
if (options === void 0) { options = { log: true }; }
|
417
|
+
var internalOptions = {
|
418
|
+
unmount: function (el) {
|
419
|
+
return (exports.lastMountedReactDom || ReactDOM__default["default"]).unmountComponentAtNode(el);
|
420
|
+
},
|
421
|
+
};
|
422
|
+
return makeUnmountFn(options, internalOptions);
|
423
|
+
}
|
424
|
+
|
446
425
|
// mounting hooks inside a test component mostly copied from
|
447
426
|
// https://github.com/testing-library/react-hooks-testing-library/blob/master/src/pure.js
|
448
427
|
function resultContainer() {
|
@@ -505,6 +484,8 @@ var mountHook = function (hookFn) {
|
|
505
484
|
};
|
506
485
|
|
507
486
|
exports.createMount = createMount;
|
487
|
+
exports.makeMountFn = makeMountFn;
|
488
|
+
exports.makeUnmountFn = makeUnmountFn;
|
508
489
|
exports.mount = mount;
|
509
490
|
exports.mountHook = mountHook;
|
510
491
|
exports.unmount = unmount;
|
@@ -6,7 +6,7 @@
|
|
6
6
|
*/
|
7
7
|
|
8
8
|
import * as React from 'react';
|
9
|
-
import
|
9
|
+
import ReactDOM from 'react-dom';
|
10
10
|
|
11
11
|
/******************************************************************************
|
12
12
|
Copyright (c) Microsoft Corporation.
|
@@ -230,37 +230,21 @@ var injectStyles = function (options) {
|
|
230
230
|
return injectStylesBeforeElement(options, document, el);
|
231
231
|
};
|
232
232
|
};
|
233
|
-
/**
|
234
|
-
* Mount a React component in a blank document; register it as an alias
|
235
|
-
* To access: use an alias or original component reference
|
236
|
-
* @function mount
|
237
|
-
* @param {React.ReactElement} jsx - component to mount
|
238
|
-
* @param {MountOptions} [options] - options, like alias, styles
|
239
|
-
* @see https://github.com/bahmutov/@cypress/react
|
240
|
-
* @see https://glebbahmutov.com/blog/my-vision-for-component-tests/
|
241
|
-
* @example
|
242
|
-
```
|
243
|
-
import Hello from './hello.jsx'
|
244
|
-
import { mount } from '@cypress/react'
|
245
|
-
it('works', () => {
|
246
|
-
mount(<Hello onClick={cy.stub()} />)
|
247
|
-
// use Cypress commands
|
248
|
-
cy.contains('Hello').click()
|
249
|
-
})
|
250
|
-
```
|
251
|
-
**/
|
252
|
-
var mount = function (jsx, options) {
|
253
|
-
if (options === void 0) { options = {}; }
|
254
|
-
return _mount('mount', jsx, options);
|
255
|
-
};
|
256
233
|
var lastMountedReactDom;
|
257
234
|
/**
|
258
|
-
*
|
259
|
-
*
|
260
|
-
*
|
235
|
+
* Create an `mount` function. Performs all the non-React-version specific
|
236
|
+
* behavior related to mounting. The React-version-specific code
|
237
|
+
* is injected. This helps us to maintain a consistent public API
|
238
|
+
* and handle breaking changes in React's rendering API.
|
239
|
+
*
|
240
|
+
* This is designed to be consumed by `npm/react{16,17,18}`, and other React adapters,
|
241
|
+
* or people writing adapters for third-party, custom adapters.
|
261
242
|
*/
|
262
|
-
var
|
243
|
+
var makeMountFn = function (type, jsx, options, rerenderKey, internalMountOptions) {
|
263
244
|
if (options === void 0) { options = {}; }
|
245
|
+
if (!internalMountOptions) {
|
246
|
+
throw Error('internalMountOptions must be provided with `render` and `reactDom` parameters');
|
247
|
+
}
|
264
248
|
// Get the display name property via the component constructor
|
265
249
|
// @ts-ignore FIXME
|
266
250
|
var componentName = getDisplayName(jsx.type, options.alias);
|
@@ -273,7 +257,7 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
273
257
|
.then(injectStyles(options))
|
274
258
|
.then(function () {
|
275
259
|
var _a, _b, _c;
|
276
|
-
var reactDomToUse =
|
260
|
+
var reactDomToUse = internalMountOptions.reactDom;
|
277
261
|
lastMountedReactDom = reactDomToUse;
|
278
262
|
var el = getContainerEl();
|
279
263
|
if (!el) {
|
@@ -291,7 +275,7 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
291
275
|
// since we always surround the component with a fragment
|
292
276
|
// let's get back the original component
|
293
277
|
var userComponent = reactComponent.props.children;
|
294
|
-
|
278
|
+
internalMountOptions.render(reactComponent, el, reactDomToUse);
|
295
279
|
if (options.log !== false) {
|
296
280
|
Cypress.log({
|
297
281
|
name: type,
|
@@ -316,8 +300,8 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
316
300
|
.then(function () {
|
317
301
|
return cy.wrap({
|
318
302
|
component: userComponent,
|
319
|
-
rerender: function (newComponent) { return
|
320
|
-
unmount:
|
303
|
+
rerender: function (newComponent) { return makeMountFn('rerender', newComponent, options, key, internalMountOptions); },
|
304
|
+
unmount: internalMountOptions.unmount,
|
321
305
|
}, { log: false });
|
322
306
|
})
|
323
307
|
// by waiting, we delaying test execution for the next tick of event loop
|
@@ -328,32 +312,19 @@ var _mount = function (type, jsx, options, rerenderKey) {
|
|
328
312
|
});
|
329
313
|
};
|
330
314
|
/**
|
331
|
-
*
|
332
|
-
*
|
333
|
-
*
|
334
|
-
*
|
335
|
-
*
|
336
|
-
```
|
337
|
-
import { mount, unmount } from '@cypress/react'
|
338
|
-
it('works', () => {
|
339
|
-
mount(...)
|
340
|
-
// interact with the component using Cypress commands
|
341
|
-
// whenever you want to unmount
|
342
|
-
unmount()
|
343
|
-
})
|
344
|
-
```
|
315
|
+
* Create an `unmount` function. Performs all the non-React-version specific
|
316
|
+
* behavior related to unmounting.
|
317
|
+
*
|
318
|
+
* This is designed to be consumed by `npm/react{16,17,18}`, and other React adapters,
|
319
|
+
* or people writing adapters for third-party, custom adapters.
|
345
320
|
*/
|
346
|
-
|
347
|
-
var unmount = function (options) {
|
348
|
-
if (options === void 0) { options = { log: true }; }
|
349
|
-
return _unmount(options);
|
350
|
-
};
|
351
|
-
var _unmount = function (options) {
|
321
|
+
var makeUnmountFn = function (options, internalUnmountOptions) {
|
352
322
|
return cy.then(function () {
|
353
323
|
return cy.get(ROOT_SELECTOR, { log: false }).then(function ($el) {
|
354
324
|
var _a;
|
355
325
|
if (lastMountedReactDom) {
|
356
|
-
|
326
|
+
internalUnmountOptions.unmount($el[0]);
|
327
|
+
var wasUnmounted = internalUnmountOptions.unmount($el[0]);
|
357
328
|
if (wasUnmounted && options.log) {
|
358
329
|
Cypress.log({
|
359
330
|
name: 'unmount',
|
@@ -381,28 +352,13 @@ var preMountCleanup = function () {
|
|
381
352
|
lastMountedReactDom.unmountComponentAtNode(el);
|
382
353
|
}
|
383
354
|
};
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
* @returns new instance of `mount` with assigned options
|
389
|
-
* @example
|
390
|
-
* ```
|
391
|
-
* import Hello from './hello.jsx'
|
392
|
-
* import { createMount } from '@cypress/react'
|
393
|
-
*
|
394
|
-
* const mount = createMount({ strict: true, cssFile: 'path/to/any/css/file.css' })
|
395
|
-
*
|
396
|
-
* it('works', () => {
|
397
|
-
* mount(<Hello />)
|
398
|
-
* // use Cypress commands
|
399
|
-
* cy.get('button').should('have.css', 'color', 'rgb(124, 12, 109)')
|
400
|
-
* })
|
401
|
-
```
|
402
|
-
**/
|
355
|
+
var _mount = function (jsx, options) {
|
356
|
+
if (options === void 0) { options = {}; }
|
357
|
+
return makeMountFn('mount', jsx, options);
|
358
|
+
};
|
403
359
|
var createMount = function (defaultOptions) {
|
404
360
|
return function (element, options) {
|
405
|
-
return
|
361
|
+
return _mount(element, __assign(__assign({}, defaultOptions), options));
|
406
362
|
};
|
407
363
|
};
|
408
364
|
// Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
|
@@ -418,6 +374,27 @@ var createMount = function (defaultOptions) {
|
|
418
374
|
// @see npm/react/cypress/component/advanced/set-timeout-example/loading-indicator-spec.js
|
419
375
|
setupHooks(preMountCleanup);
|
420
376
|
|
377
|
+
function mount(jsx, options, rerenderKey) {
|
378
|
+
if (options === void 0) { options = {}; }
|
379
|
+
var internalOptions = {
|
380
|
+
reactDom: ReactDOM,
|
381
|
+
render: function (reactComponent, el, reactDomToUse) {
|
382
|
+
return (reactDomToUse || ReactDOM).render(reactComponent, el);
|
383
|
+
},
|
384
|
+
unmount: unmount,
|
385
|
+
};
|
386
|
+
return makeMountFn('mount', jsx, __assign({ ReactDom: ReactDOM }, options), rerenderKey, internalOptions);
|
387
|
+
}
|
388
|
+
function unmount(options) {
|
389
|
+
if (options === void 0) { options = { log: true }; }
|
390
|
+
var internalOptions = {
|
391
|
+
unmount: function (el) {
|
392
|
+
return (lastMountedReactDom || ReactDOM).unmountComponentAtNode(el);
|
393
|
+
},
|
394
|
+
};
|
395
|
+
return makeUnmountFn(options, internalOptions);
|
396
|
+
}
|
397
|
+
|
421
398
|
// mounting hooks inside a test component mostly copied from
|
422
399
|
// https://github.com/testing-library/react-hooks-testing-library/blob/master/src/pure.js
|
423
400
|
function resultContainer() {
|
@@ -479,4 +456,4 @@ var mountHook = function (hookFn) {
|
|
479
456
|
return mount(componentTest).then(function () { return result; });
|
480
457
|
};
|
481
458
|
|
482
|
-
export { createMount, mount, mountHook, unmount };
|
459
|
+
export { createMount, lastMountedReactDom, makeMountFn, makeUnmountFn, mount, mountHook, unmount };
|
package/react/dist/index.d.ts
CHANGED
package/react/dist/mount.d.ts
CHANGED
@@ -1,143 +1,7 @@
|
|
1
1
|
/// <reference types="cypress" />
|
2
|
-
import
|
3
|
-
import
|
4
|
-
|
5
|
-
|
6
|
-
* Mount a React component in a blank document; register it as an alias
|
7
|
-
* To access: use an alias or original component reference
|
8
|
-
* @function mount
|
9
|
-
* @param {React.ReactElement} jsx - component to mount
|
10
|
-
* @param {MountOptions} [options] - options, like alias, styles
|
11
|
-
* @see https://github.com/bahmutov/@cypress/react
|
12
|
-
* @see https://glebbahmutov.com/blog/my-vision-for-component-tests/
|
13
|
-
* @example
|
14
|
-
```
|
15
|
-
import Hello from './hello.jsx'
|
16
|
-
import { mount } from '@cypress/react'
|
17
|
-
it('works', () => {
|
18
|
-
mount(<Hello onClick={cy.stub()} />)
|
19
|
-
// use Cypress commands
|
20
|
-
cy.contains('Hello').click()
|
21
|
-
})
|
22
|
-
```
|
23
|
-
**/
|
24
|
-
export declare const mount: (jsx: React.ReactNode, options?: MountOptions) => globalThis.Cypress.Chainable<MountReturn>;
|
25
|
-
/**
|
26
|
-
* Removes the mounted component. Notice this command automatically
|
27
|
-
* queues up the `unmount` into Cypress chain, thus you don't need `.then`
|
28
|
-
* to call it.
|
29
|
-
* @see https://github.com/cypress-io/cypress/tree/develop/npm/react/cypress/component/basic/unmount
|
30
|
-
* @example
|
31
|
-
```
|
32
|
-
import { mount, unmount } from '@cypress/react'
|
33
|
-
it('works', () => {
|
34
|
-
mount(...)
|
35
|
-
// interact with the component using Cypress commands
|
36
|
-
// whenever you want to unmount
|
37
|
-
unmount()
|
38
|
-
})
|
39
|
-
```
|
40
|
-
*/
|
41
|
-
export declare const unmount: (options?: {
|
2
|
+
import React from 'react';
|
3
|
+
import type { MountOptions } from './types';
|
4
|
+
export declare function mount(jsx: React.ReactNode, options?: MountOptions, rerenderKey?: string): Cypress.Chainable<import("./types").MountReturn>;
|
5
|
+
export declare function unmount(options?: {
|
42
6
|
log: boolean;
|
43
|
-
})
|
44
|
-
/**
|
45
|
-
* Creates new instance of `mount` function with default options
|
46
|
-
* @function createMount
|
47
|
-
* @param {MountOptions} [defaultOptions] - defaultOptions for returned `mount` function
|
48
|
-
* @returns new instance of `mount` with assigned options
|
49
|
-
* @example
|
50
|
-
* ```
|
51
|
-
* import Hello from './hello.jsx'
|
52
|
-
* import { createMount } from '@cypress/react'
|
53
|
-
*
|
54
|
-
* const mount = createMount({ strict: true, cssFile: 'path/to/any/css/file.css' })
|
55
|
-
*
|
56
|
-
* it('works', () => {
|
57
|
-
* mount(<Hello />)
|
58
|
-
* // use Cypress commands
|
59
|
-
* cy.get('button').should('have.css', 'color', 'rgb(124, 12, 109)')
|
60
|
-
* })
|
61
|
-
```
|
62
|
-
**/
|
63
|
-
export declare const createMount: (defaultOptions: MountOptions) => (element: React.ReactElement, options?: Partial<StyleOptions & MountReactComponentOptions> | undefined) => globalThis.Cypress.Chainable<MountReturn>;
|
64
|
-
/** @deprecated Should be removed in the next major version */
|
65
|
-
export default mount;
|
66
|
-
export interface ReactModule {
|
67
|
-
name: string;
|
68
|
-
type: string;
|
69
|
-
location: string;
|
70
|
-
source: string;
|
71
|
-
}
|
72
|
-
export interface MountReactComponentOptions {
|
73
|
-
alias: string;
|
74
|
-
ReactDom: typeof ReactDOM;
|
75
|
-
/**
|
76
|
-
* Log the mounting command into Cypress Command Log,
|
77
|
-
* true by default.
|
78
|
-
*/
|
79
|
-
log: boolean;
|
80
|
-
/**
|
81
|
-
* Render component in React [strict mode](https://reactjs.org/docs/strict-mode.html)
|
82
|
-
* It activates additional checks and warnings for child components.
|
83
|
-
*/
|
84
|
-
strict: boolean;
|
85
|
-
}
|
86
|
-
export declare type MountOptions = Partial<StyleOptions & MountReactComponentOptions>;
|
87
|
-
export interface MountReturn {
|
88
|
-
/**
|
89
|
-
* The component that was rendered.
|
90
|
-
*/
|
91
|
-
component: React.ReactNode;
|
92
|
-
/**
|
93
|
-
* Rerenders the specified component with new props. This allows testing of components that store state (`setState`)
|
94
|
-
* or have asynchronous updates (`useEffect`, `useLayoutEffect`).
|
95
|
-
*/
|
96
|
-
rerender: (component: React.ReactNode) => globalThis.Cypress.Chainable<MountReturn>;
|
97
|
-
/**
|
98
|
-
* Removes the mounted component.
|
99
|
-
* @see `unmount`
|
100
|
-
*/
|
101
|
-
unmount: () => globalThis.Cypress.Chainable<JQuery<HTMLElement>>;
|
102
|
-
}
|
103
|
-
/**
|
104
|
-
* The `type` property from the transpiled JSX object.
|
105
|
-
* @example
|
106
|
-
* const { type } = React.createElement('div', null, 'Hello')
|
107
|
-
* const { type } = <div>Hello</div>
|
108
|
-
*/
|
109
|
-
export interface JSX extends Function {
|
110
|
-
displayName: string;
|
111
|
-
}
|
112
|
-
export declare namespace Cypress {
|
113
|
-
interface Cypress {
|
114
|
-
stylesCache: any;
|
115
|
-
React: string;
|
116
|
-
ReactDOM: string;
|
117
|
-
Styles: string;
|
118
|
-
modules: ReactModule[];
|
119
|
-
}
|
120
|
-
interface Chainable<Subject> {
|
121
|
-
state: (key: string) => any;
|
122
|
-
/**
|
123
|
-
* Mount a React component in a blank document; register it as an alias
|
124
|
-
* To access: use an alias or original component reference
|
125
|
-
* @function cy.mount
|
126
|
-
* @param {Object} jsx - component to mount
|
127
|
-
* @param {string} [Component] - alias to use later
|
128
|
-
* @example
|
129
|
-
```
|
130
|
-
import Hello from './hello.jsx'
|
131
|
-
// mount and access by alias
|
132
|
-
cy.mount(<Hello />, 'Hello')
|
133
|
-
// using default alias
|
134
|
-
cy.get('@Component')
|
135
|
-
// using specified alias
|
136
|
-
cy.get('@Hello').its('state').should(...)
|
137
|
-
// using original component
|
138
|
-
cy.get(Hello)
|
139
|
-
```
|
140
|
-
**/
|
141
|
-
get<S = any>(alias: string | symbol | Function, options?: Partial<any>): Chainable<any>;
|
142
|
-
}
|
143
|
-
}
|
7
|
+
}): Cypress.Chainable<JQuery<HTMLElement>>;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/// <reference types="cypress" />
|
2
|
+
import type React from 'react';
|
3
|
+
import type { StyleOptions } from '@cypress/mount-utils';
|
4
|
+
export interface UnmountArgs {
|
5
|
+
log: boolean;
|
6
|
+
boundComponentMessage?: string;
|
7
|
+
}
|
8
|
+
export interface InternalUnmountOptionsReact {
|
9
|
+
unmount: (el: HTMLElement) => boolean;
|
10
|
+
}
|
11
|
+
export interface InternalUnmountOptionsReact18 {
|
12
|
+
unmount: () => boolean;
|
13
|
+
}
|
14
|
+
export declare type InternalUnmountOptions = InternalUnmountOptionsReact | InternalUnmountOptionsReact18;
|
15
|
+
export declare type MountOptions = Partial<StyleOptions & MountReactComponentOptions>;
|
16
|
+
export interface MountReactComponentOptions {
|
17
|
+
alias: string;
|
18
|
+
ReactDom: typeof import('react-dom');
|
19
|
+
/**
|
20
|
+
* Log the mounting command into Cypress Command Log,
|
21
|
+
* true by default.
|
22
|
+
*/
|
23
|
+
log: boolean;
|
24
|
+
/**
|
25
|
+
* Render component in React [strict mode](https://reactjs.org/docs/strict-mode.html)
|
26
|
+
* It activates additional checks and warnings for child components.
|
27
|
+
*/
|
28
|
+
strict: boolean;
|
29
|
+
}
|
30
|
+
export interface InternalMountOptions {
|
31
|
+
reactDom: typeof import('react-dom');
|
32
|
+
render: (reactComponent: ReturnType<typeof React.createElement>, el: HTMLElement, reactDomToUse: typeof import('react-dom')) => void;
|
33
|
+
unmount: (options: UnmountArgs) => void;
|
34
|
+
}
|
35
|
+
export interface MountReturn {
|
36
|
+
/**
|
37
|
+
* The component that was rendered.
|
38
|
+
*/
|
39
|
+
component: React.ReactNode;
|
40
|
+
/**
|
41
|
+
* Rerenders the specified component with new props. This allows testing of components that store state (`setState`)
|
42
|
+
* or have asynchronous updates (`useEffect`, `useLayoutEffect`).
|
43
|
+
*/
|
44
|
+
rerender: (component: React.ReactNode) => globalThis.Cypress.Chainable<MountReturn>;
|
45
|
+
/**
|
46
|
+
* Removes the mounted component.
|
47
|
+
* @see `unmount`
|
48
|
+
*/
|
49
|
+
unmount: (payload: UnmountArgs) => void;
|
50
|
+
}
|
package/react/package.json
CHANGED
@@ -14,9 +14,6 @@
|
|
14
14
|
"test": "yarn cy:run",
|
15
15
|
"watch": "yarn build --watch --watch.exclude ./dist/**/*"
|
16
16
|
},
|
17
|
-
"dependencies": {
|
18
|
-
"debug": "^4.3.2"
|
19
|
-
},
|
20
17
|
"devDependencies": {
|
21
18
|
"@cypress/mount-utils": "0.0.0-development",
|
22
19
|
"@rollup/plugin-commonjs": "^17.1.0",
|
@@ -24,7 +21,6 @@
|
|
24
21
|
"@vitejs/plugin-react": "1.3.1",
|
25
22
|
"axios": "0.21.2",
|
26
23
|
"cypress": "0.0.0-development",
|
27
|
-
"cypress-plugin-snapshots": "1.4.4",
|
28
24
|
"prop-types": "15.7.2",
|
29
25
|
"react": "16.8.6",
|
30
26
|
"react-dom": "16.8.6",
|
@@ -33,7 +29,7 @@
|
|
33
29
|
"rollup": "^2.38.5",
|
34
30
|
"rollup-plugin-typescript2": "^0.29.0",
|
35
31
|
"typescript": "^4.2.3",
|
36
|
-
"vite": "
|
32
|
+
"vite": "3.0.3",
|
37
33
|
"vite-plugin-require-transform": "1.0.3"
|
38
34
|
},
|
39
35
|
"peerDependencies": {
|