cypress 10.1.0 → 10.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. package/lib/exec/open.js +1 -2
  2. package/lib/exec/spawn.js +14 -2
  3. package/lib/tasks/download.js +10 -11
  4. package/lib/tasks/install.js +7 -6
  5. package/lib/util.js +54 -10
  6. package/mount-utils/CHANGELOG.md +19 -0
  7. package/mount-utils/dist/index.js +8 -1
  8. package/mount-utils/package.json +1 -1
  9. package/package.json +13 -13
  10. package/react/CHANGELOG.md +44 -0
  11. package/react/dist/cypress-react.browser.js +17 -2
  12. package/react/dist/cypress-react.cjs.js +17 -2
  13. package/react/dist/cypress-react.esm-bundler.js +17 -2
  14. package/react/package.json +1 -3
  15. package/types/cypress.d.ts +3 -3
  16. package/vue/CHANGELOG.md +42 -0
  17. package/vue/README.md +1 -0
  18. package/vue/dist/@vue/test-utils/baseWrapper.d.ts +61 -0
  19. package/vue/dist/@vue/test-utils/components/RouterLinkStub.d.ts +21 -0
  20. package/vue/dist/@vue/test-utils/config.d.ts +28 -0
  21. package/vue/dist/@vue/test-utils/constants/dom-events.d.ts +900 -0
  22. package/vue/dist/@vue/test-utils/createDomEvent.d.ts +9 -0
  23. package/vue/dist/@vue/test-utils/domWrapper.d.ts +18 -0
  24. package/vue/dist/@vue/test-utils/emit.d.ts +4 -0
  25. package/vue/dist/@vue/test-utils/errorWrapper.d.ts +1 -0
  26. package/vue/dist/@vue/test-utils/index.d.ts +10 -0
  27. package/vue/dist/@vue/test-utils/interfaces/wrapperLike.d.ts +56 -0
  28. package/vue/dist/@vue/test-utils/mount.d.ts +33 -0
  29. package/vue/dist/@vue/test-utils/stubs.d.ts +26 -0
  30. package/vue/dist/@vue/test-utils/types.d.ts +125 -0
  31. package/vue/dist/@vue/test-utils/utils/autoUnmount.d.ts +5 -0
  32. package/vue/dist/@vue/test-utils/utils/compileSlots.d.ts +2 -0
  33. package/vue/dist/@vue/test-utils/utils/componentName.d.ts +4 -0
  34. package/vue/dist/@vue/test-utils/utils/find.d.ts +10 -0
  35. package/vue/dist/@vue/test-utils/utils/flushPromises.d.ts +1 -0
  36. package/vue/dist/@vue/test-utils/utils/getRootNodes.d.ts +2 -0
  37. package/vue/dist/@vue/test-utils/utils/isElement.d.ts +1 -0
  38. package/vue/dist/@vue/test-utils/utils/isElementVisible.d.ts +6 -0
  39. package/vue/dist/@vue/test-utils/utils/matchName.d.ts +1 -0
  40. package/vue/dist/@vue/test-utils/utils/stringifyNode.d.ts +1 -0
  41. package/vue/dist/@vue/test-utils/utils/vueCompatSupport.d.ts +8 -0
  42. package/vue/dist/@vue/test-utils/utils/vueShared.d.ts +3 -0
  43. package/vue/dist/@vue/test-utils/utils.d.ts +13 -0
  44. package/vue/dist/@vue/test-utils/vueWrapper.d.ts +34 -0
  45. package/vue/dist/@vue/test-utils/wrapperFactory.d.ts +14 -0
  46. package/vue/dist/cypress-vue.cjs.js +224 -139
  47. package/vue/dist/cypress-vue.esm-bundler.js +224 -140
  48. package/vue/dist/index.d.ts +34 -3
  49. package/vue/package.json +10 -7
  50. package/vue2/CHANGELOG.md +32 -0
  51. package/vue2/dist/cypress-vue2.browser.js +17 -2
  52. package/vue2/dist/cypress-vue2.cjs.js +17 -2
  53. package/vue2/dist/cypress-vue2.esm-bundler.js +17 -2
  54. package/vue2/package.json +2 -4
@@ -8,7 +8,7 @@
8
8
  import * as Vue from 'vue';
9
9
  import { nextTick, defineComponent, computed, h, reactive, createApp, transformVNodeArgs, Transition, TransitionGroup, Teleport, setDevtoolsHook } from 'vue';
10
10
 
11
- /*! *****************************************************************************
11
+ /******************************************************************************
12
12
  Copyright (c) Microsoft Corporation.
13
13
 
14
14
  Permission to use, copy, modify, and/or distribute this software for any
@@ -32,7 +32,161 @@ var __assign$1 = function() {
32
32
  return t;
33
33
  };
34
34
  return __assign$1.apply(this, arguments);
35
+ };
36
+
37
+ function __rest(s, e) {
38
+ var t = {};
39
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
40
+ t[p] = s[p];
41
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
42
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
43
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
44
+ t[p[i]] = s[p[i]];
45
+ }
46
+ return t;
47
+ }
48
+
49
+ const ROOT_SELECTOR = '[data-cy-root]';
50
+ const getContainerEl = () => {
51
+ const el = document.querySelector(ROOT_SELECTOR);
52
+ if (el) {
53
+ return el;
54
+ }
55
+ 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.`);
35
56
  };
57
+ /**
58
+ * Remove any style or extra link elements from the iframe placeholder
59
+ * left from any previous test
60
+ *
61
+ */
62
+ function cleanupStyles() {
63
+ const styles = document.body.querySelectorAll('[data-cy=injected-style-tag]');
64
+ styles.forEach((styleElement) => {
65
+ if (styleElement.parentElement) {
66
+ styleElement.parentElement.removeChild(styleElement);
67
+ }
68
+ });
69
+ const links = document.body.querySelectorAll('[data-cy=injected-stylesheet]');
70
+ links.forEach((link) => {
71
+ if (link.parentElement) {
72
+ link.parentElement.removeChild(link);
73
+ }
74
+ });
75
+ }
76
+ /**
77
+ * Insert links to external style resources.
78
+ */
79
+ function insertStylesheets(stylesheets, document, el) {
80
+ stylesheets.forEach((href) => {
81
+ const link = document.createElement('link');
82
+ link.type = 'text/css';
83
+ link.rel = 'stylesheet';
84
+ link.href = href;
85
+ link.dataset.cy = 'injected-stylesheet';
86
+ document.body.insertBefore(link, el);
87
+ });
88
+ }
89
+ /**
90
+ * Inserts a single stylesheet element
91
+ */
92
+ function insertStyles(styles, document, el) {
93
+ styles.forEach((style) => {
94
+ const styleElement = document.createElement('style');
95
+ styleElement.dataset.cy = 'injected-style-tag';
96
+ styleElement.appendChild(document.createTextNode(style));
97
+ document.body.insertBefore(styleElement, el);
98
+ });
99
+ }
100
+ function insertSingleCssFile(cssFilename, document, el, log) {
101
+ return cy.readFile(cssFilename, { log }).then((css) => {
102
+ const style = document.createElement('style');
103
+ style.appendChild(document.createTextNode(css));
104
+ document.body.insertBefore(style, el);
105
+ });
106
+ }
107
+ /**
108
+ * Reads the given CSS file from local file system
109
+ * and adds the loaded style text as an element.
110
+ */
111
+ function insertLocalCssFiles(cssFilenames, document, el, log) {
112
+ return Cypress.Promise.mapSeries(cssFilenames, (cssFilename) => {
113
+ return insertSingleCssFile(cssFilename, document, el, log);
114
+ });
115
+ }
116
+ /**
117
+ * Injects custom style text or CSS file or 3rd party style resources
118
+ * into the given document.
119
+ */
120
+ const injectStylesBeforeElement = (options, document, el) => {
121
+ if (!el)
122
+ return;
123
+ // first insert all stylesheets as Link elements
124
+ let stylesheets = [];
125
+ if (typeof options.stylesheet === 'string') {
126
+ stylesheets.push(options.stylesheet);
127
+ }
128
+ else if (Array.isArray(options.stylesheet)) {
129
+ stylesheets = stylesheets.concat(options.stylesheet);
130
+ }
131
+ if (typeof options.stylesheets === 'string') {
132
+ options.stylesheets = [options.stylesheets];
133
+ }
134
+ if (options.stylesheets) {
135
+ stylesheets = stylesheets.concat(options.stylesheets);
136
+ }
137
+ insertStylesheets(stylesheets, document, el);
138
+ // insert any styles as <style>...</style> elements
139
+ let styles = [];
140
+ if (typeof options.style === 'string') {
141
+ styles.push(options.style);
142
+ }
143
+ else if (Array.isArray(options.style)) {
144
+ styles = styles.concat(options.style);
145
+ }
146
+ if (typeof options.styles === 'string') {
147
+ styles.push(options.styles);
148
+ }
149
+ else if (Array.isArray(options.styles)) {
150
+ styles = styles.concat(options.styles);
151
+ }
152
+ insertStyles(styles, document, el);
153
+ // now load any css files by path and add their content
154
+ // as <style>...</style> elements
155
+ let cssFiles = [];
156
+ if (typeof options.cssFile === 'string') {
157
+ cssFiles.push(options.cssFile);
158
+ }
159
+ else if (Array.isArray(options.cssFile)) {
160
+ cssFiles = cssFiles.concat(options.cssFile);
161
+ }
162
+ if (typeof options.cssFiles === 'string') {
163
+ cssFiles.push(options.cssFiles);
164
+ }
165
+ else if (Array.isArray(options.cssFiles)) {
166
+ cssFiles = cssFiles.concat(options.cssFiles);
167
+ }
168
+ return insertLocalCssFiles(cssFiles, document, el, options.log);
169
+ };
170
+ function setupHooks(optionalCallback) {
171
+ // Consumed by the framework "mount" libs. A user might register their own mount in the scaffolded 'commands.js'
172
+ // file that is imported by e2e and component support files by default. We don't want CT side effects to run when e2e
173
+ // testing so we early return.
174
+ // System test to verify CT side effects do not pollute e2e: system-tests/test/e2e_with_mount_import_spec.ts
175
+ if (Cypress.testingType !== 'component') {
176
+ return;
177
+ }
178
+ // When running component specs, we cannot allow "cy.visit"
179
+ // because it will wipe out our preparation work, and does not make much sense
180
+ // thus we overwrite "cy.visit" to throw an error
181
+ Cypress.Commands.overwrite('visit', () => {
182
+ throw new Error('cy.visit from a component spec is not allowed');
183
+ });
184
+ // @ts-ignore
185
+ Cypress.on('test:before:run', () => {
186
+ optionalCallback === null || optionalCallback === void 0 ? void 0 : optionalCallback();
187
+ cleanupStyles();
188
+ });
189
+ }
36
190
 
37
191
  /**
38
192
  * Make a map and return a function for checking if a key
@@ -6768,7 +6922,12 @@ function stubComponents(stubs, shallow, renderStubDefaultSlot) {
6768
6922
  throw new Error('Attempted to stub a non-component');
6769
6923
  }
6770
6924
  var newStub = createStubOnce(type, function () {
6771
- return createStub({
6925
+ return config.plugins.createStubs
6926
+ ? config.plugins.createStubs({
6927
+ name: stubName_1,
6928
+ component: type
6929
+ })
6930
+ : createStub({
6772
6931
  name: stubName_1,
6773
6932
  type: type,
6774
6933
  renderStubDefaultSlot: renderStubDefaultSlot
@@ -12997,6 +13156,30 @@ function processSlot(source, Vue$1) {
12997
13156
  };
12998
13157
  }
12999
13158
 
13159
+ var isEnabled = false;
13160
+ var wrapperInstances = [];
13161
+ function disableAutoUnmount() {
13162
+ isEnabled = false;
13163
+ wrapperInstances.length = 0;
13164
+ }
13165
+ function enableAutoUnmount(hook) {
13166
+ if (isEnabled) {
13167
+ throw new Error('enableAutoUnmount cannot be called more than once');
13168
+ }
13169
+ isEnabled = true;
13170
+ hook(function () {
13171
+ wrapperInstances.forEach(function (wrapper) {
13172
+ wrapper.unmount();
13173
+ });
13174
+ wrapperInstances.length = 0;
13175
+ });
13176
+ }
13177
+ function trackInstance(wrapper) {
13178
+ if (!isEnabled)
13179
+ return;
13180
+ wrapperInstances.push(wrapper);
13181
+ }
13182
+
13000
13183
  var MOUNT_OPTIONS = [
13001
13184
  'attachTo',
13002
13185
  'attrs',
@@ -13225,8 +13408,12 @@ function mount$1(inputComponent, options) {
13225
13408
  };
13226
13409
  console.warn = warnSave;
13227
13410
  var wrapper = createVueWrapper(app, appRef, setProps);
13411
+ trackInstance(wrapper);
13228
13412
  return wrapper;
13229
13413
  }
13414
+ var shallowMount = function (component, options) {
13415
+ return mount$1(component, __assign(__assign({}, options), { shallow: true }));
13416
+ };
13230
13417
 
13231
13418
  // match return type of router.resolve: RouteLocation & { href: string }
13232
13419
  var defaultRoute = {
@@ -13242,7 +13429,7 @@ var defaultRoute = {
13242
13429
  href: '/'
13243
13430
  };
13244
13431
  // TODO: Borrow typings from vue-router-next
13245
- defineComponent({
13432
+ var RouterLinkStub = defineComponent({
13246
13433
  name: 'RouterLinkStub',
13247
13434
  props: {
13248
13435
  to: {
@@ -13272,143 +13459,32 @@ defineComponent({
13272
13459
  }
13273
13460
  });
13274
13461
 
13275
- typeof setImmediate === 'function' ? setImmediate : setTimeout;
13276
-
13277
- const ROOT_SELECTOR = '[data-cy-root]';
13278
- const getContainerEl = () => {
13279
- const el = document.querySelector(ROOT_SELECTOR);
13280
- if (el) {
13281
- return el;
13282
- }
13283
- throw Error(`No element found that matches selector ${ROOT_SELECTOR}. Please use the mount utils to mount it properly`);
13284
- };
13285
- /**
13286
- * Remove any style or extra link elements from the iframe placeholder
13287
- * left from any previous test
13288
- *
13289
- */
13290
- function cleanupStyles() {
13291
- const styles = document.body.querySelectorAll('[data-cy=injected-style-tag]');
13292
- styles.forEach((styleElement) => {
13293
- if (styleElement.parentElement) {
13294
- styleElement.parentElement.removeChild(styleElement);
13295
- }
13296
- });
13297
- const links = document.body.querySelectorAll('[data-cy=injected-stylesheet]');
13298
- links.forEach((link) => {
13299
- if (link.parentElement) {
13300
- link.parentElement.removeChild(link);
13301
- }
13302
- });
13303
- }
13304
- /**
13305
- * Insert links to external style resources.
13306
- */
13307
- function insertStylesheets(stylesheets, document, el) {
13308
- stylesheets.forEach((href) => {
13309
- const link = document.createElement('link');
13310
- link.type = 'text/css';
13311
- link.rel = 'stylesheet';
13312
- link.href = href;
13313
- link.dataset.cy = 'injected-stylesheet';
13314
- document.body.insertBefore(link, el);
13315
- });
13316
- }
13317
- /**
13318
- * Inserts a single stylesheet element
13319
- */
13320
- function insertStyles(styles, document, el) {
13321
- styles.forEach((style) => {
13322
- const styleElement = document.createElement('style');
13323
- styleElement.dataset.cy = 'injected-style-tag';
13324
- styleElement.appendChild(document.createTextNode(style));
13325
- document.body.insertBefore(styleElement, el);
13326
- });
13327
- }
13328
- function insertSingleCssFile(cssFilename, document, el, log) {
13329
- return cy.readFile(cssFilename, { log }).then((css) => {
13330
- const style = document.createElement('style');
13331
- style.appendChild(document.createTextNode(css));
13332
- document.body.insertBefore(style, el);
13333
- });
13334
- }
13335
- /**
13336
- * Reads the given CSS file from local file system
13337
- * and adds the loaded style text as an element.
13338
- */
13339
- function insertLocalCssFiles(cssFilenames, document, el, log) {
13340
- return Cypress.Promise.mapSeries(cssFilenames, (cssFilename) => {
13341
- return insertSingleCssFile(cssFilename, document, el, log);
13342
- });
13343
- }
13344
- /**
13345
- * Injects custom style text or CSS file or 3rd party style resources
13346
- * into the given document.
13347
- */
13348
- const injectStylesBeforeElement = (options, document, el) => {
13349
- if (!el)
13350
- return;
13351
- // first insert all stylesheets as Link elements
13352
- let stylesheets = [];
13353
- if (typeof options.stylesheet === 'string') {
13354
- stylesheets.push(options.stylesheet);
13355
- }
13356
- else if (Array.isArray(options.stylesheet)) {
13357
- stylesheets = stylesheets.concat(options.stylesheet);
13358
- }
13359
- if (typeof options.stylesheets === 'string') {
13360
- options.stylesheets = [options.stylesheets];
13361
- }
13362
- if (options.stylesheets) {
13363
- stylesheets = stylesheets.concat(options.stylesheets);
13364
- }
13365
- insertStylesheets(stylesheets, document, el);
13366
- // insert any styles as <style>...</style> elements
13367
- let styles = [];
13368
- if (typeof options.style === 'string') {
13369
- styles.push(options.style);
13370
- }
13371
- else if (Array.isArray(options.style)) {
13372
- styles = styles.concat(options.style);
13373
- }
13374
- if (typeof options.styles === 'string') {
13375
- styles.push(options.styles);
13376
- }
13377
- else if (Array.isArray(options.styles)) {
13378
- styles = styles.concat(options.styles);
13379
- }
13380
- insertStyles(styles, document, el);
13381
- // now load any css files by path and add their content
13382
- // as <style>...</style> elements
13383
- let cssFiles = [];
13384
- if (typeof options.cssFile === 'string') {
13385
- cssFiles.push(options.cssFile);
13386
- }
13387
- else if (Array.isArray(options.cssFile)) {
13388
- cssFiles = cssFiles.concat(options.cssFile);
13389
- }
13390
- if (typeof options.cssFiles === 'string') {
13391
- cssFiles.push(options.cssFiles);
13392
- }
13393
- else if (Array.isArray(options.cssFiles)) {
13394
- cssFiles = cssFiles.concat(options.cssFiles);
13395
- }
13396
- return insertLocalCssFiles(cssFiles, document, el, options.log);
13397
- };
13398
- function setupHooks(optionalCallback) {
13399
- // When running component specs, we cannot allow "cy.visit"
13400
- // because it will wipe out our preparation work, and does not make much sense
13401
- // thus we overwrite "cy.visit" to throw an error
13402
- Cypress.Commands.overwrite('visit', () => {
13403
- throw new Error('cy.visit from a component spec is not allowed');
13404
- });
13405
- // @ts-ignore
13406
- Cypress.on('test:before:run', () => {
13407
- optionalCallback === null || optionalCallback === void 0 ? void 0 : optionalCallback();
13408
- cleanupStyles();
13409
- });
13462
+ var scheduler = typeof setImmediate === 'function' ? setImmediate : setTimeout;
13463
+ // Credit to: https://github.com/kentor/flush-promises
13464
+ function flushPromises() {
13465
+ return new Promise(function (resolve) {
13466
+ scheduler(resolve, 0);
13467
+ });
13410
13468
  }
13411
13469
 
13470
+ var _VueTestUtils = /*#__PURE__*/Object.freeze({
13471
+ __proto__: null,
13472
+ DOMWrapper: DOMWrapper,
13473
+ RouterLinkStub: RouterLinkStub,
13474
+ VueWrapper: VueWrapper,
13475
+ config: config,
13476
+ createWrapperError: createWrapperError,
13477
+ disableAutoUnmount: disableAutoUnmount,
13478
+ enableAutoUnmount: enableAutoUnmount,
13479
+ flushPromises: flushPromises,
13480
+ mount: mount$1,
13481
+ shallowMount: shallowMount
13482
+ });
13483
+
13484
+ var // We do not expose the `mount` from VueTestUtils, instead, we wrap it and expose a
13485
+ // Cypress-compatible `mount` API.
13486
+ VTUmount = mount$1,
13487
+ VueTestUtils = __rest(_VueTestUtils, ["mount", "shallowMount"]);
13412
13488
  var DEFAULT_COMP_NAME = 'unknown';
13413
13489
  Cypress.on('run:start', function () {
13414
13490
  // `mount` is designed to work with component testing only.
@@ -13457,7 +13533,7 @@ function mount(componentOptions, options) {
13457
13533
  componentNode.id = '__cy_vue_root';
13458
13534
  el.append(componentNode);
13459
13535
  // mount the component using VTU and return the wrapper in Cypress.VueWrapper
13460
- var wrapper = mount$1(componentOptions, __assign$1({ attachTo: componentNode }, options));
13536
+ var wrapper = VTUmount(componentOptions, __assign$1({ attachTo: componentNode }, options));
13461
13537
  Cypress.vueWrapper = wrapper;
13462
13538
  Cypress.vue = wrapper.vm;
13463
13539
  return cy
@@ -13506,6 +13582,14 @@ function mountCallback(component, options) {
13506
13582
  return mount(component, options);
13507
13583
  };
13508
13584
  }
13585
+ // Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
13586
+ // by creating an explicit function/import that the user can register in their 'component.js' support file,
13587
+ // such as:
13588
+ // import 'cypress/<my-framework>/support'
13589
+ // or
13590
+ // import { registerCT } from 'cypress/<my-framework>'
13591
+ // registerCT()
13592
+ // Note: This would be a breaking change
13509
13593
  setupHooks();
13510
13594
 
13511
- export { mount, mountCallback };
13595
+ export { VueTestUtils, mount, mountCallback };
@@ -1,7 +1,39 @@
1
1
  /// <reference types="cypress" />
2
- import { ComponentPublicInstance, VNodeProps, AllowedComponentProps, ComponentCustomProps, ExtractPropTypes, ExtractDefaultPropTypes, DefineComponent, FunctionalComponent, ComputedOptions, MethodOptions, ComponentOptionsMixin, EmitsOptions, ComponentOptionsWithObjectProps, ComponentPropsOptions, ComponentOptionsWithArrayProps, ComponentOptionsWithoutProps } from 'vue';
3
- import { MountingOptions, VueWrapper } from '@vue/test-utils';
2
+ import type { ComponentPublicInstance, VNodeProps, AllowedComponentProps, ComponentCustomProps, ExtractPropTypes, ExtractDefaultPropTypes, DefineComponent, FunctionalComponent, ComputedOptions, MethodOptions, ComponentOptionsMixin, EmitsOptions, ComponentOptionsWithObjectProps, ComponentPropsOptions, ComponentOptionsWithArrayProps, ComponentOptionsWithoutProps } from 'vue';
3
+ import type { MountingOptions, VueWrapper } from './@vue/test-utils';
4
4
  import { StyleOptions } from '@cypress/mount-utils';
5
+ import * as _VueTestUtils from './@vue/test-utils';
6
+ declare const VueTestUtils: {
7
+ enableAutoUnmount: typeof _VueTestUtils.enableAutoUnmount;
8
+ disableAutoUnmount: typeof _VueTestUtils.disableAutoUnmount;
9
+ RouterLinkStub: DefineComponent<{
10
+ to: {
11
+ type: (ObjectConstructor | StringConstructor)[];
12
+ required: true;
13
+ };
14
+ custom: {
15
+ type: BooleanConstructor;
16
+ default: boolean;
17
+ };
18
+ }, unknown, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, Record<string, any>, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes<{
19
+ to: {
20
+ type: (ObjectConstructor | StringConstructor)[];
21
+ required: true;
22
+ };
23
+ custom: {
24
+ type: BooleanConstructor;
25
+ default: boolean;
26
+ };
27
+ }>>, {
28
+ custom: boolean;
29
+ }>;
30
+ VueWrapper: typeof VueWrapper;
31
+ DOMWrapper: typeof _VueTestUtils.DOMWrapper;
32
+ config: import("./@vue/test-utils/config").GlobalConfigOptions;
33
+ flushPromises: typeof _VueTestUtils.flushPromises;
34
+ createWrapperError: typeof _VueTestUtils.createWrapperError;
35
+ };
36
+ export { VueTestUtils };
5
37
  declare type GlobalMountOptions = Required<MountingOptions<any>>['global'];
6
38
  declare global {
7
39
  namespace Cypress {
@@ -53,4 +85,3 @@ export declare function mount<PropsOptions extends Readonly<ComponentPropsOption
53
85
  * beforeEach(mountVue(component, options))
54
86
  */
55
87
  export declare function mountCallback(component: any, options?: any): () => Cypress.Chainable;
56
- export {};
package/vue/package.json CHANGED
@@ -2,21 +2,18 @@
2
2
  "name": "@cypress/vue",
3
3
  "version": "0.0.0-development",
4
4
  "description": "Browser-based Component Testing for Vue.js with Cypress.io ✌️🌲",
5
- "private": true,
6
5
  "main": "dist/cypress-vue.cjs.js",
7
6
  "scripts": {
8
7
  "build-prod": "yarn build",
9
8
  "cy:open": "node ../../scripts/cypress.js open --component --project ${PWD}",
10
9
  "cy:run": "node ../../scripts/cypress.js run --component --project ${PWD}",
11
10
  "build": "rimraf dist && rollup -c rollup.config.js",
12
- "postbuild": "node ../../scripts/sync-exported-npm-with-cli.js",
13
- "typecheck": "vue-tsc --noEmit",
11
+ "postbuild": "node --require @packages/ts/register ./inline-types.ts && node ../../scripts/sync-exported-npm-with-cli.js",
12
+ "typecheck": "yarn tsd && vue-tsc --noEmit",
14
13
  "test": "yarn cy:run",
14
+ "tsd": "yarn build && yarn tsc -p test-tsd/tsconfig.tsd.json",
15
15
  "watch": "yarn build --watch --watch.exclude ./dist/**/*"
16
16
  },
17
- "dependencies": {
18
- "@vue/test-utils": "2.0.0-rc.19"
19
- },
20
17
  "devDependencies": {
21
18
  "@cypress/code-coverage": "3.8.1",
22
19
  "@cypress/mount-utils": "0.0.0-development",
@@ -24,9 +21,11 @@
24
21
  "@rollup/plugin-node-resolve": "^11.1.1",
25
22
  "@vitejs/plugin-vue": "2.3.1",
26
23
  "@vue/compiler-sfc": "3.2.31",
24
+ "@vue/test-utils": "2.0.0-rc.19",
27
25
  "axios": "0.21.2",
28
26
  "cypress": "0.0.0-development",
29
27
  "debug": "^4.3.2",
28
+ "globby": "^11.0.1",
30
29
  "rollup": "^2.38.5",
31
30
  "rollup-plugin-istanbul": "2.0.1",
32
31
  "rollup-plugin-typescript2": "^0.29.0",
@@ -51,7 +50,7 @@
51
50
  "engines": {
52
51
  "node": ">=8"
53
52
  },
54
- "types": "dist",
53
+ "types": "dist/index.d.ts",
55
54
  "license": "MIT",
56
55
  "repository": {
57
56
  "type": "git",
@@ -72,6 +71,10 @@
72
71
  {
73
72
  "name": "Amir Rustamzadeh",
74
73
  "social": "@amirrustam"
74
+ },
75
+ {
76
+ "name": "Lachlan Miller",
77
+ "social": "@Lachlan19900"
75
78
  }
76
79
  ],
77
80
  "module": "dist/cypress-vue.esm-bundler.js",
package/vue2/CHANGELOG.md CHANGED
@@ -1,3 +1,35 @@
1
+ # [@cypress/vue2-v1.0.1](https://github.com/cypress-io/cypress/compare/@cypress/vue2-v1.0.0...@cypress/vue2-v1.0.1) (2022-06-13)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * remove http npm registry link for vue2 ([0bd3069](https://github.com/cypress-io/cypress/commit/0bd306962bce2a32d7b87fc1811a7b9feeb63ae2))
7
+
8
+ # @cypress/vue2-v1.0.0 (2022-06-13)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * add package.json metadata for webpack-dev-server ([#22292](https://github.com/cypress-io/cypress/issues/22292)) ([9cfec97](https://github.com/cypress-io/cypress/commit/9cfec9750f2ddc9fe691aabbe2ecc9bc02a3d915))
14
+ * display cy.mount command log ([#21500](https://github.com/cypress-io/cypress/issues/21500)) ([140b4ba](https://github.com/cypress-io/cypress/commit/140b4ba2110243712a614a39b2408c30cce4d0b1))
15
+ * Doc changes around vue2 ([#21066](https://github.com/cypress-io/cypress/issues/21066)) ([17905a7](https://github.com/cypress-io/cypress/commit/17905a79ee5106b0d72c8e74bb717fcd7b796dee))
16
+
17
+
18
+ ### chore
19
+
20
+ * prep npm packages for use with Cypress v10 ([b924d08](https://github.com/cypress-io/cypress/commit/b924d086ee2e2ccc93303731e001b2c9e9d0af17))
21
+
22
+
23
+ ### Features
24
+
25
+ * Add vue2 package from npm/vue/v2 branch ([#21026](https://github.com/cypress-io/cypress/issues/21026)) ([3aa69e2](https://github.com/cypress-io/cypress/commit/3aa69e2538aae5702bfc48789c54f37263ce08fc))
26
+ * swap the #__cy_root id selector to become data-cy-root for component mounting ([#20951](https://github.com/cypress-io/cypress/issues/20951)) ([0e7b555](https://github.com/cypress-io/cypress/commit/0e7b555f93fb403f431c5de4a07ae7ad6ac89ba2))
27
+
28
+
29
+ ### BREAKING CHANGES
30
+
31
+ * new version of packages for Cypress v10
32
+
1
33
  # @cypress/vue2-v1.0.0 (2021-06-17)
2
34
 
3
35
  ### Features
@@ -12,7 +12,7 @@ var CypressVue2 = (function (exports, require$$0$1) {
12
12
 
13
13
  var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
14
14
 
15
- /*! *****************************************************************************
15
+ /******************************************************************************
16
16
  Copyright (c) Microsoft Corporation.
17
17
 
18
18
  Permission to use, copy, modify, and/or distribute this software for any
@@ -19857,7 +19857,7 @@ var CypressVue2 = (function (exports, require$$0$1) {
19857
19857
  if (el) {
19858
19858
  return el;
19859
19859
  }
19860
- throw Error(`No element found that matches selector ${ROOT_SELECTOR}. Please use the mount utils to mount it properly`);
19860
+ 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.`);
19861
19861
  };
19862
19862
  /**
19863
19863
  * Remove any style or extra link elements from the iframe placeholder
@@ -19973,6 +19973,13 @@ var CypressVue2 = (function (exports, require$$0$1) {
19973
19973
  return insertLocalCssFiles(cssFiles, document, el, options.log);
19974
19974
  };
19975
19975
  function setupHooks(optionalCallback) {
19976
+ // Consumed by the framework "mount" libs. A user might register their own mount in the scaffolded 'commands.js'
19977
+ // file that is imported by e2e and component support files by default. We don't want CT side effects to run when e2e
19978
+ // testing so we early return.
19979
+ // System test to verify CT side effects do not pollute e2e: system-tests/test/e2e_with_mount_import_spec.ts
19980
+ if (Cypress.testingType !== 'component') {
19981
+ return;
19982
+ }
19976
19983
  // When running component specs, we cannot allow "cy.visit"
19977
19984
  // because it will wipe out our preparation work, and does not make much sense
19978
19985
  // thus we overwrite "cy.visit" to throw an error
@@ -20179,6 +20186,14 @@ var CypressVue2 = (function (exports, require$$0$1) {
20179
20186
  var mountCallback = function (component, options) {
20180
20187
  return function () { return mount$1(component, options); };
20181
20188
  };
20189
+ // Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
20190
+ // by creating an explicit function/import that the user can register in their 'component.js' support file,
20191
+ // such as:
20192
+ // import 'cypress/<my-framework>/support'
20193
+ // or
20194
+ // import { registerCT } from 'cypress/<my-framework>'
20195
+ // registerCT()
20196
+ // Note: This would be a breaking change
20182
20197
  setupHooks();
20183
20198
 
20184
20199
  exports.mount = mount$1;
@@ -15,7 +15,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
15
15
 
16
16
  var require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0$1);
17
17
 
18
- /*! *****************************************************************************
18
+ /******************************************************************************
19
19
  Copyright (c) Microsoft Corporation.
20
20
 
21
21
  Permission to use, copy, modify, and/or distribute this software for any
@@ -19860,7 +19860,7 @@ const getContainerEl = () => {
19860
19860
  if (el) {
19861
19861
  return el;
19862
19862
  }
19863
- throw Error(`No element found that matches selector ${ROOT_SELECTOR}. Please use the mount utils to mount it properly`);
19863
+ 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.`);
19864
19864
  };
19865
19865
  /**
19866
19866
  * Remove any style or extra link elements from the iframe placeholder
@@ -19976,6 +19976,13 @@ const injectStylesBeforeElement = (options, document, el) => {
19976
19976
  return insertLocalCssFiles(cssFiles, document, el, options.log);
19977
19977
  };
19978
19978
  function setupHooks(optionalCallback) {
19979
+ // Consumed by the framework "mount" libs. A user might register their own mount in the scaffolded 'commands.js'
19980
+ // file that is imported by e2e and component support files by default. We don't want CT side effects to run when e2e
19981
+ // testing so we early return.
19982
+ // System test to verify CT side effects do not pollute e2e: system-tests/test/e2e_with_mount_import_spec.ts
19983
+ if (Cypress.testingType !== 'component') {
19984
+ return;
19985
+ }
19979
19986
  // When running component specs, we cannot allow "cy.visit"
19980
19987
  // because it will wipe out our preparation work, and does not make much sense
19981
19988
  // thus we overwrite "cy.visit" to throw an error
@@ -20182,6 +20189,14 @@ var mount$1 = function (component, optionsOrProps) {
20182
20189
  var mountCallback = function (component, options) {
20183
20190
  return function () { return mount$1(component, options); };
20184
20191
  };
20192
+ // Side effects from "import { mount } from '@cypress/<my-framework>'" are annoying, we should avoid doing this
20193
+ // by creating an explicit function/import that the user can register in their 'component.js' support file,
20194
+ // such as:
20195
+ // import 'cypress/<my-framework>/support'
20196
+ // or
20197
+ // import { registerCT } from 'cypress/<my-framework>'
20198
+ // registerCT()
20199
+ // Note: This would be a breaking change
20185
20200
  setupHooks();
20186
20201
 
20187
20202
  exports.mount = mount$1;