cypress 10.1.0 → 10.3.1
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/exec/open.js +1 -2
- package/lib/exec/spawn.js +14 -2
- package/lib/tasks/download.js +10 -11
- package/lib/tasks/install.js +7 -6
- package/lib/util.js +54 -10
- package/mount-utils/CHANGELOG.md +19 -0
- package/mount-utils/dist/index.js +8 -1
- package/mount-utils/package.json +1 -1
- package/package.json +13 -13
- package/react/CHANGELOG.md +44 -0
- package/react/dist/cypress-react.browser.js +17 -2
- package/react/dist/cypress-react.cjs.js +17 -2
- package/react/dist/cypress-react.esm-bundler.js +17 -2
- package/react/package.json +1 -3
- package/types/cypress.d.ts +3 -3
- package/vue/CHANGELOG.md +42 -0
- package/vue/README.md +1 -0
- package/vue/dist/@vue/test-utils/baseWrapper.d.ts +61 -0
- package/vue/dist/@vue/test-utils/components/RouterLinkStub.d.ts +21 -0
- package/vue/dist/@vue/test-utils/config.d.ts +28 -0
- package/vue/dist/@vue/test-utils/constants/dom-events.d.ts +900 -0
- package/vue/dist/@vue/test-utils/createDomEvent.d.ts +9 -0
- package/vue/dist/@vue/test-utils/domWrapper.d.ts +18 -0
- package/vue/dist/@vue/test-utils/emit.d.ts +4 -0
- package/vue/dist/@vue/test-utils/errorWrapper.d.ts +1 -0
- package/vue/dist/@vue/test-utils/index.d.ts +10 -0
- package/vue/dist/@vue/test-utils/interfaces/wrapperLike.d.ts +56 -0
- package/vue/dist/@vue/test-utils/mount.d.ts +33 -0
- package/vue/dist/@vue/test-utils/stubs.d.ts +26 -0
- package/vue/dist/@vue/test-utils/types.d.ts +125 -0
- package/vue/dist/@vue/test-utils/utils/autoUnmount.d.ts +5 -0
- package/vue/dist/@vue/test-utils/utils/compileSlots.d.ts +2 -0
- package/vue/dist/@vue/test-utils/utils/componentName.d.ts +4 -0
- package/vue/dist/@vue/test-utils/utils/find.d.ts +10 -0
- package/vue/dist/@vue/test-utils/utils/flushPromises.d.ts +1 -0
- package/vue/dist/@vue/test-utils/utils/getRootNodes.d.ts +2 -0
- package/vue/dist/@vue/test-utils/utils/isElement.d.ts +1 -0
- package/vue/dist/@vue/test-utils/utils/isElementVisible.d.ts +6 -0
- package/vue/dist/@vue/test-utils/utils/matchName.d.ts +1 -0
- package/vue/dist/@vue/test-utils/utils/stringifyNode.d.ts +1 -0
- package/vue/dist/@vue/test-utils/utils/vueCompatSupport.d.ts +8 -0
- package/vue/dist/@vue/test-utils/utils/vueShared.d.ts +3 -0
- package/vue/dist/@vue/test-utils/utils.d.ts +13 -0
- package/vue/dist/@vue/test-utils/vueWrapper.d.ts +34 -0
- package/vue/dist/@vue/test-utils/wrapperFactory.d.ts +14 -0
- package/vue/dist/cypress-vue.cjs.js +224 -139
- package/vue/dist/cypress-vue.esm-bundler.js +224 -140
- package/vue/dist/index.d.ts +34 -3
- package/vue/package.json +10 -7
- package/vue2/CHANGELOG.md +32 -0
- package/vue2/dist/cypress-vue2.browser.js +17 -2
- package/vue2/dist/cypress-vue2.cjs.js +17 -2
- package/vue2/dist/cypress-vue2.esm-bundler.js +17 -2
- package/vue2/package.json +2 -4
@@ -31,7 +31,7 @@ function _interopNamespace(e) {
|
|
31
31
|
|
32
32
|
var Vue__namespace = /*#__PURE__*/_interopNamespace(Vue);
|
33
33
|
|
34
|
-
|
34
|
+
/******************************************************************************
|
35
35
|
Copyright (c) Microsoft Corporation.
|
36
36
|
|
37
37
|
Permission to use, copy, modify, and/or distribute this software for any
|
@@ -55,7 +55,161 @@ var __assign$1 = function() {
|
|
55
55
|
return t;
|
56
56
|
};
|
57
57
|
return __assign$1.apply(this, arguments);
|
58
|
+
};
|
59
|
+
|
60
|
+
function __rest(s, e) {
|
61
|
+
var t = {};
|
62
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
63
|
+
t[p] = s[p];
|
64
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
65
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
66
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
67
|
+
t[p[i]] = s[p[i]];
|
68
|
+
}
|
69
|
+
return t;
|
70
|
+
}
|
71
|
+
|
72
|
+
const ROOT_SELECTOR = '[data-cy-root]';
|
73
|
+
const getContainerEl = () => {
|
74
|
+
const el = document.querySelector(ROOT_SELECTOR);
|
75
|
+
if (el) {
|
76
|
+
return el;
|
77
|
+
}
|
78
|
+
throw Error(`No element found that matches selector ${ROOT_SELECTOR}. Please add a root element with data-cy-root attribute to your "component-index.html" file so that Cypress can attach your component to the DOM.`);
|
58
79
|
};
|
80
|
+
/**
|
81
|
+
* Remove any style or extra link elements from the iframe placeholder
|
82
|
+
* left from any previous test
|
83
|
+
*
|
84
|
+
*/
|
85
|
+
function cleanupStyles() {
|
86
|
+
const styles = document.body.querySelectorAll('[data-cy=injected-style-tag]');
|
87
|
+
styles.forEach((styleElement) => {
|
88
|
+
if (styleElement.parentElement) {
|
89
|
+
styleElement.parentElement.removeChild(styleElement);
|
90
|
+
}
|
91
|
+
});
|
92
|
+
const links = document.body.querySelectorAll('[data-cy=injected-stylesheet]');
|
93
|
+
links.forEach((link) => {
|
94
|
+
if (link.parentElement) {
|
95
|
+
link.parentElement.removeChild(link);
|
96
|
+
}
|
97
|
+
});
|
98
|
+
}
|
99
|
+
/**
|
100
|
+
* Insert links to external style resources.
|
101
|
+
*/
|
102
|
+
function insertStylesheets(stylesheets, document, el) {
|
103
|
+
stylesheets.forEach((href) => {
|
104
|
+
const link = document.createElement('link');
|
105
|
+
link.type = 'text/css';
|
106
|
+
link.rel = 'stylesheet';
|
107
|
+
link.href = href;
|
108
|
+
link.dataset.cy = 'injected-stylesheet';
|
109
|
+
document.body.insertBefore(link, el);
|
110
|
+
});
|
111
|
+
}
|
112
|
+
/**
|
113
|
+
* Inserts a single stylesheet element
|
114
|
+
*/
|
115
|
+
function insertStyles(styles, document, el) {
|
116
|
+
styles.forEach((style) => {
|
117
|
+
const styleElement = document.createElement('style');
|
118
|
+
styleElement.dataset.cy = 'injected-style-tag';
|
119
|
+
styleElement.appendChild(document.createTextNode(style));
|
120
|
+
document.body.insertBefore(styleElement, el);
|
121
|
+
});
|
122
|
+
}
|
123
|
+
function insertSingleCssFile(cssFilename, document, el, log) {
|
124
|
+
return cy.readFile(cssFilename, { log }).then((css) => {
|
125
|
+
const style = document.createElement('style');
|
126
|
+
style.appendChild(document.createTextNode(css));
|
127
|
+
document.body.insertBefore(style, el);
|
128
|
+
});
|
129
|
+
}
|
130
|
+
/**
|
131
|
+
* Reads the given CSS file from local file system
|
132
|
+
* and adds the loaded style text as an element.
|
133
|
+
*/
|
134
|
+
function insertLocalCssFiles(cssFilenames, document, el, log) {
|
135
|
+
return Cypress.Promise.mapSeries(cssFilenames, (cssFilename) => {
|
136
|
+
return insertSingleCssFile(cssFilename, document, el, log);
|
137
|
+
});
|
138
|
+
}
|
139
|
+
/**
|
140
|
+
* Injects custom style text or CSS file or 3rd party style resources
|
141
|
+
* into the given document.
|
142
|
+
*/
|
143
|
+
const injectStylesBeforeElement = (options, document, el) => {
|
144
|
+
if (!el)
|
145
|
+
return;
|
146
|
+
// first insert all stylesheets as Link elements
|
147
|
+
let stylesheets = [];
|
148
|
+
if (typeof options.stylesheet === 'string') {
|
149
|
+
stylesheets.push(options.stylesheet);
|
150
|
+
}
|
151
|
+
else if (Array.isArray(options.stylesheet)) {
|
152
|
+
stylesheets = stylesheets.concat(options.stylesheet);
|
153
|
+
}
|
154
|
+
if (typeof options.stylesheets === 'string') {
|
155
|
+
options.stylesheets = [options.stylesheets];
|
156
|
+
}
|
157
|
+
if (options.stylesheets) {
|
158
|
+
stylesheets = stylesheets.concat(options.stylesheets);
|
159
|
+
}
|
160
|
+
insertStylesheets(stylesheets, document, el);
|
161
|
+
// insert any styles as <style>...</style> elements
|
162
|
+
let styles = [];
|
163
|
+
if (typeof options.style === 'string') {
|
164
|
+
styles.push(options.style);
|
165
|
+
}
|
166
|
+
else if (Array.isArray(options.style)) {
|
167
|
+
styles = styles.concat(options.style);
|
168
|
+
}
|
169
|
+
if (typeof options.styles === 'string') {
|
170
|
+
styles.push(options.styles);
|
171
|
+
}
|
172
|
+
else if (Array.isArray(options.styles)) {
|
173
|
+
styles = styles.concat(options.styles);
|
174
|
+
}
|
175
|
+
insertStyles(styles, document, el);
|
176
|
+
// now load any css files by path and add their content
|
177
|
+
// as <style>...</style> elements
|
178
|
+
let cssFiles = [];
|
179
|
+
if (typeof options.cssFile === 'string') {
|
180
|
+
cssFiles.push(options.cssFile);
|
181
|
+
}
|
182
|
+
else if (Array.isArray(options.cssFile)) {
|
183
|
+
cssFiles = cssFiles.concat(options.cssFile);
|
184
|
+
}
|
185
|
+
if (typeof options.cssFiles === 'string') {
|
186
|
+
cssFiles.push(options.cssFiles);
|
187
|
+
}
|
188
|
+
else if (Array.isArray(options.cssFiles)) {
|
189
|
+
cssFiles = cssFiles.concat(options.cssFiles);
|
190
|
+
}
|
191
|
+
return insertLocalCssFiles(cssFiles, document, el, options.log);
|
192
|
+
};
|
193
|
+
function setupHooks(optionalCallback) {
|
194
|
+
// Consumed by the framework "mount" libs. A user might register their own mount in the scaffolded 'commands.js'
|
195
|
+
// file that is imported by e2e and component support files by default. We don't want CT side effects to run when e2e
|
196
|
+
// testing so we early return.
|
197
|
+
// System test to verify CT side effects do not pollute e2e: system-tests/test/e2e_with_mount_import_spec.ts
|
198
|
+
if (Cypress.testingType !== 'component') {
|
199
|
+
return;
|
200
|
+
}
|
201
|
+
// When running component specs, we cannot allow "cy.visit"
|
202
|
+
// because it will wipe out our preparation work, and does not make much sense
|
203
|
+
// thus we overwrite "cy.visit" to throw an error
|
204
|
+
Cypress.Commands.overwrite('visit', () => {
|
205
|
+
throw new Error('cy.visit from a component spec is not allowed');
|
206
|
+
});
|
207
|
+
// @ts-ignore
|
208
|
+
Cypress.on('test:before:run', () => {
|
209
|
+
optionalCallback === null || optionalCallback === void 0 ? void 0 : optionalCallback();
|
210
|
+
cleanupStyles();
|
211
|
+
});
|
212
|
+
}
|
59
213
|
|
60
214
|
/**
|
61
215
|
* Make a map and return a function for checking if a key
|
@@ -6791,7 +6945,12 @@ function stubComponents(stubs, shallow, renderStubDefaultSlot) {
|
|
6791
6945
|
throw new Error('Attempted to stub a non-component');
|
6792
6946
|
}
|
6793
6947
|
var newStub = createStubOnce(type, function () {
|
6794
|
-
return
|
6948
|
+
return config.plugins.createStubs
|
6949
|
+
? config.plugins.createStubs({
|
6950
|
+
name: stubName_1,
|
6951
|
+
component: type
|
6952
|
+
})
|
6953
|
+
: createStub({
|
6795
6954
|
name: stubName_1,
|
6796
6955
|
type: type,
|
6797
6956
|
renderStubDefaultSlot: renderStubDefaultSlot
|
@@ -13020,6 +13179,30 @@ function processSlot(source, Vue$1) {
|
|
13020
13179
|
};
|
13021
13180
|
}
|
13022
13181
|
|
13182
|
+
var isEnabled = false;
|
13183
|
+
var wrapperInstances = [];
|
13184
|
+
function disableAutoUnmount() {
|
13185
|
+
isEnabled = false;
|
13186
|
+
wrapperInstances.length = 0;
|
13187
|
+
}
|
13188
|
+
function enableAutoUnmount(hook) {
|
13189
|
+
if (isEnabled) {
|
13190
|
+
throw new Error('enableAutoUnmount cannot be called more than once');
|
13191
|
+
}
|
13192
|
+
isEnabled = true;
|
13193
|
+
hook(function () {
|
13194
|
+
wrapperInstances.forEach(function (wrapper) {
|
13195
|
+
wrapper.unmount();
|
13196
|
+
});
|
13197
|
+
wrapperInstances.length = 0;
|
13198
|
+
});
|
13199
|
+
}
|
13200
|
+
function trackInstance(wrapper) {
|
13201
|
+
if (!isEnabled)
|
13202
|
+
return;
|
13203
|
+
wrapperInstances.push(wrapper);
|
13204
|
+
}
|
13205
|
+
|
13023
13206
|
var MOUNT_OPTIONS = [
|
13024
13207
|
'attachTo',
|
13025
13208
|
'attrs',
|
@@ -13248,8 +13431,12 @@ function mount$1(inputComponent, options) {
|
|
13248
13431
|
};
|
13249
13432
|
console.warn = warnSave;
|
13250
13433
|
var wrapper = createVueWrapper(app, appRef, setProps);
|
13434
|
+
trackInstance(wrapper);
|
13251
13435
|
return wrapper;
|
13252
13436
|
}
|
13437
|
+
var shallowMount = function (component, options) {
|
13438
|
+
return mount$1(component, __assign(__assign({}, options), { shallow: true }));
|
13439
|
+
};
|
13253
13440
|
|
13254
13441
|
// match return type of router.resolve: RouteLocation & { href: string }
|
13255
13442
|
var defaultRoute = {
|
@@ -13265,7 +13452,7 @@ var defaultRoute = {
|
|
13265
13452
|
href: '/'
|
13266
13453
|
};
|
13267
13454
|
// TODO: Borrow typings from vue-router-next
|
13268
|
-
Vue.defineComponent({
|
13455
|
+
var RouterLinkStub = Vue.defineComponent({
|
13269
13456
|
name: 'RouterLinkStub',
|
13270
13457
|
props: {
|
13271
13458
|
to: {
|
@@ -13295,143 +13482,32 @@ Vue.defineComponent({
|
|
13295
13482
|
}
|
13296
13483
|
});
|
13297
13484
|
|
13298
|
-
typeof setImmediate === 'function' ? setImmediate : setTimeout;
|
13299
|
-
|
13300
|
-
|
13301
|
-
|
13302
|
-
|
13303
|
-
|
13304
|
-
return el;
|
13305
|
-
}
|
13306
|
-
throw Error(`No element found that matches selector ${ROOT_SELECTOR}. Please use the mount utils to mount it properly`);
|
13307
|
-
};
|
13308
|
-
/**
|
13309
|
-
* Remove any style or extra link elements from the iframe placeholder
|
13310
|
-
* left from any previous test
|
13311
|
-
*
|
13312
|
-
*/
|
13313
|
-
function cleanupStyles() {
|
13314
|
-
const styles = document.body.querySelectorAll('[data-cy=injected-style-tag]');
|
13315
|
-
styles.forEach((styleElement) => {
|
13316
|
-
if (styleElement.parentElement) {
|
13317
|
-
styleElement.parentElement.removeChild(styleElement);
|
13318
|
-
}
|
13319
|
-
});
|
13320
|
-
const links = document.body.querySelectorAll('[data-cy=injected-stylesheet]');
|
13321
|
-
links.forEach((link) => {
|
13322
|
-
if (link.parentElement) {
|
13323
|
-
link.parentElement.removeChild(link);
|
13324
|
-
}
|
13325
|
-
});
|
13326
|
-
}
|
13327
|
-
/**
|
13328
|
-
* Insert links to external style resources.
|
13329
|
-
*/
|
13330
|
-
function insertStylesheets(stylesheets, document, el) {
|
13331
|
-
stylesheets.forEach((href) => {
|
13332
|
-
const link = document.createElement('link');
|
13333
|
-
link.type = 'text/css';
|
13334
|
-
link.rel = 'stylesheet';
|
13335
|
-
link.href = href;
|
13336
|
-
link.dataset.cy = 'injected-stylesheet';
|
13337
|
-
document.body.insertBefore(link, el);
|
13338
|
-
});
|
13339
|
-
}
|
13340
|
-
/**
|
13341
|
-
* Inserts a single stylesheet element
|
13342
|
-
*/
|
13343
|
-
function insertStyles(styles, document, el) {
|
13344
|
-
styles.forEach((style) => {
|
13345
|
-
const styleElement = document.createElement('style');
|
13346
|
-
styleElement.dataset.cy = 'injected-style-tag';
|
13347
|
-
styleElement.appendChild(document.createTextNode(style));
|
13348
|
-
document.body.insertBefore(styleElement, el);
|
13349
|
-
});
|
13350
|
-
}
|
13351
|
-
function insertSingleCssFile(cssFilename, document, el, log) {
|
13352
|
-
return cy.readFile(cssFilename, { log }).then((css) => {
|
13353
|
-
const style = document.createElement('style');
|
13354
|
-
style.appendChild(document.createTextNode(css));
|
13355
|
-
document.body.insertBefore(style, el);
|
13356
|
-
});
|
13357
|
-
}
|
13358
|
-
/**
|
13359
|
-
* Reads the given CSS file from local file system
|
13360
|
-
* and adds the loaded style text as an element.
|
13361
|
-
*/
|
13362
|
-
function insertLocalCssFiles(cssFilenames, document, el, log) {
|
13363
|
-
return Cypress.Promise.mapSeries(cssFilenames, (cssFilename) => {
|
13364
|
-
return insertSingleCssFile(cssFilename, document, el, log);
|
13365
|
-
});
|
13366
|
-
}
|
13367
|
-
/**
|
13368
|
-
* Injects custom style text or CSS file or 3rd party style resources
|
13369
|
-
* into the given document.
|
13370
|
-
*/
|
13371
|
-
const injectStylesBeforeElement = (options, document, el) => {
|
13372
|
-
if (!el)
|
13373
|
-
return;
|
13374
|
-
// first insert all stylesheets as Link elements
|
13375
|
-
let stylesheets = [];
|
13376
|
-
if (typeof options.stylesheet === 'string') {
|
13377
|
-
stylesheets.push(options.stylesheet);
|
13378
|
-
}
|
13379
|
-
else if (Array.isArray(options.stylesheet)) {
|
13380
|
-
stylesheets = stylesheets.concat(options.stylesheet);
|
13381
|
-
}
|
13382
|
-
if (typeof options.stylesheets === 'string') {
|
13383
|
-
options.stylesheets = [options.stylesheets];
|
13384
|
-
}
|
13385
|
-
if (options.stylesheets) {
|
13386
|
-
stylesheets = stylesheets.concat(options.stylesheets);
|
13387
|
-
}
|
13388
|
-
insertStylesheets(stylesheets, document, el);
|
13389
|
-
// insert any styles as <style>...</style> elements
|
13390
|
-
let styles = [];
|
13391
|
-
if (typeof options.style === 'string') {
|
13392
|
-
styles.push(options.style);
|
13393
|
-
}
|
13394
|
-
else if (Array.isArray(options.style)) {
|
13395
|
-
styles = styles.concat(options.style);
|
13396
|
-
}
|
13397
|
-
if (typeof options.styles === 'string') {
|
13398
|
-
styles.push(options.styles);
|
13399
|
-
}
|
13400
|
-
else if (Array.isArray(options.styles)) {
|
13401
|
-
styles = styles.concat(options.styles);
|
13402
|
-
}
|
13403
|
-
insertStyles(styles, document, el);
|
13404
|
-
// now load any css files by path and add their content
|
13405
|
-
// as <style>...</style> elements
|
13406
|
-
let cssFiles = [];
|
13407
|
-
if (typeof options.cssFile === 'string') {
|
13408
|
-
cssFiles.push(options.cssFile);
|
13409
|
-
}
|
13410
|
-
else if (Array.isArray(options.cssFile)) {
|
13411
|
-
cssFiles = cssFiles.concat(options.cssFile);
|
13412
|
-
}
|
13413
|
-
if (typeof options.cssFiles === 'string') {
|
13414
|
-
cssFiles.push(options.cssFiles);
|
13415
|
-
}
|
13416
|
-
else if (Array.isArray(options.cssFiles)) {
|
13417
|
-
cssFiles = cssFiles.concat(options.cssFiles);
|
13418
|
-
}
|
13419
|
-
return insertLocalCssFiles(cssFiles, document, el, options.log);
|
13420
|
-
};
|
13421
|
-
function setupHooks(optionalCallback) {
|
13422
|
-
// When running component specs, we cannot allow "cy.visit"
|
13423
|
-
// because it will wipe out our preparation work, and does not make much sense
|
13424
|
-
// thus we overwrite "cy.visit" to throw an error
|
13425
|
-
Cypress.Commands.overwrite('visit', () => {
|
13426
|
-
throw new Error('cy.visit from a component spec is not allowed');
|
13427
|
-
});
|
13428
|
-
// @ts-ignore
|
13429
|
-
Cypress.on('test:before:run', () => {
|
13430
|
-
optionalCallback === null || optionalCallback === void 0 ? void 0 : optionalCallback();
|
13431
|
-
cleanupStyles();
|
13432
|
-
});
|
13485
|
+
var scheduler = typeof setImmediate === 'function' ? setImmediate : setTimeout;
|
13486
|
+
// Credit to: https://github.com/kentor/flush-promises
|
13487
|
+
function flushPromises() {
|
13488
|
+
return new Promise(function (resolve) {
|
13489
|
+
scheduler(resolve, 0);
|
13490
|
+
});
|
13433
13491
|
}
|
13434
13492
|
|
13493
|
+
var _VueTestUtils = /*#__PURE__*/Object.freeze({
|
13494
|
+
__proto__: null,
|
13495
|
+
DOMWrapper: DOMWrapper,
|
13496
|
+
RouterLinkStub: RouterLinkStub,
|
13497
|
+
VueWrapper: VueWrapper,
|
13498
|
+
config: config,
|
13499
|
+
createWrapperError: createWrapperError,
|
13500
|
+
disableAutoUnmount: disableAutoUnmount,
|
13501
|
+
enableAutoUnmount: enableAutoUnmount,
|
13502
|
+
flushPromises: flushPromises,
|
13503
|
+
mount: mount$1,
|
13504
|
+
shallowMount: shallowMount
|
13505
|
+
});
|
13506
|
+
|
13507
|
+
var // We do not expose the `mount` from VueTestUtils, instead, we wrap it and expose a
|
13508
|
+
// Cypress-compatible `mount` API.
|
13509
|
+
VTUmount = mount$1,
|
13510
|
+
VueTestUtils = __rest(_VueTestUtils, ["mount", "shallowMount"]);
|
13435
13511
|
var DEFAULT_COMP_NAME = 'unknown';
|
13436
13512
|
Cypress.on('run:start', function () {
|
13437
13513
|
// `mount` is designed to work with component testing only.
|
@@ -13480,7 +13556,7 @@ function mount(componentOptions, options) {
|
|
13480
13556
|
componentNode.id = '__cy_vue_root';
|
13481
13557
|
el.append(componentNode);
|
13482
13558
|
// mount the component using VTU and return the wrapper in Cypress.VueWrapper
|
13483
|
-
var wrapper =
|
13559
|
+
var wrapper = VTUmount(componentOptions, __assign$1({ attachTo: componentNode }, options));
|
13484
13560
|
Cypress.vueWrapper = wrapper;
|
13485
13561
|
Cypress.vue = wrapper.vm;
|
13486
13562
|
return cy
|
@@ -13529,7 +13605,16 @@ function mountCallback(component, options) {
|
|
13529
13605
|
return mount(component, options);
|
13530
13606
|
};
|
13531
13607
|
}
|
13608
|
+
// Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
|
13609
|
+
// by creating an explicit function/import that the user can register in their 'component.js' support file,
|
13610
|
+
// such as:
|
13611
|
+
// import 'cypress/<my-framework>/support'
|
13612
|
+
// or
|
13613
|
+
// import { registerCT } from 'cypress/<my-framework>'
|
13614
|
+
// registerCT()
|
13615
|
+
// Note: This would be a breaking change
|
13532
13616
|
setupHooks();
|
13533
13617
|
|
13618
|
+
exports.VueTestUtils = VueTestUtils;
|
13534
13619
|
exports.mount = mount;
|
13535
13620
|
exports.mountCallback = mountCallback;
|