cypress 10.11.0 → 11.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/angular/CHANGELOG.md +20 -0
- package/angular/dist/index.d.ts +124 -1
- package/angular/dist/index.js +59 -59
- package/lib/cli.js +15 -1
- package/lib/tasks/download.js +3 -7
- package/lib/util.js +2 -2
- package/mount-utils/CHANGELOG.md +14 -0
- package/mount-utils/README.md +5 -23
- package/mount-utils/dist/index.d.ts +25 -39
- package/mount-utils/dist/index.js +33 -112
- package/mount-utils/package.json +1 -0
- package/package.json +3 -3
- package/react/CHANGELOG.md +27 -0
- package/react/README.md +2 -22
- package/react/dist/cypress-react.cjs.js +92 -219
- package/react/dist/cypress-react.esm-bundler.js +92 -220
- package/react/dist/index.d.ts +111 -4
- package/react18/CHANGELOG.md +13 -0
- package/react18/dist/cypress-react.cjs.js +117 -180
- package/react18/dist/cypress-react.esm-bundler.js +103 -167
- package/react18/dist/index.d.ts +78 -6
- package/react18/package.json +1 -0
- package/svelte/CHANGELOG.md +20 -0
- package/svelte/dist/cypress-svelte.cjs.js +19 -114
- package/svelte/dist/cypress-svelte.esm-bundler.js +19 -114
- package/svelte/dist/index.d.ts +201 -1
- package/types/cypress.d.ts +18 -10
- package/vue/CHANGELOG.md +34 -0
- package/vue/README.md +4 -8
- package/vue/dist/cypress-vue.cjs.js +68 -151
- package/vue/dist/cypress-vue.esm-bundler.js +68 -151
- package/vue/dist/index.d.ts +1352 -104
- package/vue/package.json +1 -1
- package/vue2/CHANGELOG.md +27 -0
- package/vue2/README.md +3 -7
- package/vue2/dist/cypress-vue2.cjs.js +87 -211
- package/vue2/dist/cypress-vue2.esm-bundler.js +86 -210
- package/vue2/dist/index.d.ts +341 -172
- package/vue2/package.json +1 -3
- package/angular/dist/mount.d.ts +0 -112
- package/react/dist/createMount.d.ts +0 -31
- package/react/dist/getDisplayName.d.ts +0 -8
- package/react/dist/mount.d.ts +0 -8
- package/react/dist/mountHook.d.ts +0 -12
- package/react/dist/types.d.ts +0 -45
- package/svelte/dist/mount.d.ts +0 -30
- package/vue/dist/@vue/test-utils/baseWrapper.d.ts +0 -63
- package/vue/dist/@vue/test-utils/components/RouterLinkStub.d.ts +0 -21
- package/vue/dist/@vue/test-utils/config.d.ts +0 -30
- package/vue/dist/@vue/test-utils/constants/dom-events.d.ts +0 -900
- package/vue/dist/@vue/test-utils/createDomEvent.d.ts +0 -9
- package/vue/dist/@vue/test-utils/domWrapper.d.ts +0 -18
- package/vue/dist/@vue/test-utils/emit.d.ts +0 -5
- package/vue/dist/@vue/test-utils/errorWrapper.d.ts +0 -1
- package/vue/dist/@vue/test-utils/index.d.ts +0 -11
- package/vue/dist/@vue/test-utils/interfaces/wrapperLike.d.ts +0 -56
- package/vue/dist/@vue/test-utils/mount.d.ts +0 -35
- package/vue/dist/@vue/test-utils/stubs.d.ts +0 -22
- package/vue/dist/@vue/test-utils/types.d.ts +0 -125
- package/vue/dist/@vue/test-utils/utils/autoUnmount.d.ts +0 -5
- package/vue/dist/@vue/test-utils/utils/compileSlots.d.ts +0 -2
- package/vue/dist/@vue/test-utils/utils/componentName.d.ts +0 -4
- package/vue/dist/@vue/test-utils/utils/find.d.ts +0 -10
- package/vue/dist/@vue/test-utils/utils/flushPromises.d.ts +0 -1
- package/vue/dist/@vue/test-utils/utils/getRootNodes.d.ts +0 -2
- package/vue/dist/@vue/test-utils/utils/isElement.d.ts +0 -1
- package/vue/dist/@vue/test-utils/utils/isElementVisible.d.ts +0 -6
- package/vue/dist/@vue/test-utils/utils/matchName.d.ts +0 -1
- package/vue/dist/@vue/test-utils/utils/stringifyNode.d.ts +0 -1
- package/vue/dist/@vue/test-utils/utils/vueCompatSupport.d.ts +0 -8
- package/vue/dist/@vue/test-utils/utils/vueShared.d.ts +0 -3
- package/vue/dist/@vue/test-utils/utils.d.ts +0 -13
- package/vue/dist/@vue/test-utils/vueWrapper.d.ts +0 -35
- package/vue/dist/@vue/test-utils/wrapperFactory.d.ts +0 -14
package/angular/CHANGELOG.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
# [@cypress/angular-v2.0.1](https://github.com/cypress-io/cypress/compare/@cypress/angular-v2.0.0...@cypress/angular-v2.0.1) (2022-11-08)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* make component derived info not throw ([#24571](https://github.com/cypress-io/cypress/issues/24571)) ([838dd4f](https://github.com/cypress-io/cypress/commit/838dd4fa2e0ec56633d0af2faf10a47d190b5594))
|
7
|
+
|
8
|
+
# [@cypress/angular-v2.0.0](https://github.com/cypress-io/cypress/compare/@cypress/angular-v1.1.2...@cypress/angular-v2.0.0) (2022-11-07)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* possibility to override global services in Angular component tests ([#24394](https://github.com/cypress-io/cypress/issues/24394)) ([54d2853](https://github.com/cypress-io/cypress/commit/54d285321723450920e0f1d50374c4bd0590e72a))
|
14
|
+
* remove last mounted component upon subsequent mount calls ([#24470](https://github.com/cypress-io/cypress/issues/24470)) ([f39eb1c](https://github.com/cypress-io/cypress/commit/f39eb1c19e0923bda7ae263168fc6448da942d54))
|
15
|
+
|
16
|
+
|
17
|
+
### BREAKING CHANGES
|
18
|
+
|
19
|
+
* remove last mounted component upon subsequent mount calls of mount
|
20
|
+
|
1
21
|
# [@cypress/angular-v1.1.2](https://github.com/cypress-io/cypress/compare/@cypress/angular-v1.1.1...@cypress/angular-v1.1.2) (2022-10-11)
|
2
22
|
|
3
23
|
|
package/angular/dist/index.d.ts
CHANGED
@@ -1 +1,124 @@
|
|
1
|
-
|
1
|
+
/// <reference types="cypress" />
|
2
|
+
|
3
|
+
import { Type } from '@angular/core';
|
4
|
+
import { TestModuleMetadata, ComponentFixture } from '@angular/core/testing';
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Additional module configurations needed while mounting the component, like
|
8
|
+
* providers, declarations, imports and even component @Inputs()
|
9
|
+
*
|
10
|
+
*
|
11
|
+
* @interface MountConfig
|
12
|
+
* @see https://angular.io/api/core/testing/TestModuleMetadata
|
13
|
+
*/
|
14
|
+
interface MountConfig<T> extends TestModuleMetadata {
|
15
|
+
/**
|
16
|
+
* @memberof MountConfig
|
17
|
+
* @description flag to automatically create a cy.spy() for every component @Output() property
|
18
|
+
* @example
|
19
|
+
* export class ButtonComponent {
|
20
|
+
* @Output clicked = new EventEmitter()
|
21
|
+
* }
|
22
|
+
*
|
23
|
+
* cy.mount(ButtonComponent, { autoSpyOutputs: true })
|
24
|
+
* cy.get('@clickedSpy).should('have.been.called')
|
25
|
+
*/
|
26
|
+
autoSpyOutputs?: boolean;
|
27
|
+
/**
|
28
|
+
* @memberof MountConfig
|
29
|
+
* @description flag defaulted to true to automatically detect changes in your components
|
30
|
+
*/
|
31
|
+
autoDetectChanges?: boolean;
|
32
|
+
/**
|
33
|
+
* @memberof MountConfig
|
34
|
+
* @example
|
35
|
+
* import { ButtonComponent } from 'button/button.component'
|
36
|
+
* it('renders a button with Save text', () => {
|
37
|
+
* cy.mount(ButtonComponent, { componentProperties: { text: 'Save' }})
|
38
|
+
* cy.get('button').contains('Save')
|
39
|
+
* })
|
40
|
+
*
|
41
|
+
* it('renders a button with a cy.spy() replacing EventEmitter', () => {
|
42
|
+
* cy.mount(ButtonComponent, {
|
43
|
+
* componentProperties: {
|
44
|
+
* clicked: cy.spy().as('mySpy)
|
45
|
+
* }
|
46
|
+
* })
|
47
|
+
* cy.get('button').click()
|
48
|
+
* cy.get('@mySpy').should('have.been.called')
|
49
|
+
* })
|
50
|
+
*/
|
51
|
+
componentProperties?: Partial<{
|
52
|
+
[P in keyof T]: T[P];
|
53
|
+
}>;
|
54
|
+
}
|
55
|
+
/**
|
56
|
+
* Type that the `mount` function returns
|
57
|
+
* @type MountResponse<T>
|
58
|
+
*/
|
59
|
+
declare type MountResponse<T> = {
|
60
|
+
/**
|
61
|
+
* Fixture for debugging and testing a component.
|
62
|
+
*
|
63
|
+
* @memberof MountResponse
|
64
|
+
* @see https://angular.io/api/core/testing/ComponentFixture
|
65
|
+
*/
|
66
|
+
fixture: ComponentFixture<T>;
|
67
|
+
/**
|
68
|
+
* The instance of the root component class
|
69
|
+
*
|
70
|
+
* @memberof MountResponse
|
71
|
+
* @see https://angular.io/api/core/testing/ComponentFixture#componentInstance
|
72
|
+
*/
|
73
|
+
component: T;
|
74
|
+
};
|
75
|
+
/**
|
76
|
+
* Mounts an Angular component inside Cypress browser
|
77
|
+
*
|
78
|
+
* @param component Angular component being mounted or its template
|
79
|
+
* @param config configuration used to configure the TestBed
|
80
|
+
* @example
|
81
|
+
* import { mount } from '@cypress/angular'
|
82
|
+
* import { StepperComponent } from './stepper.component'
|
83
|
+
* import { MyService } from 'services/my.service'
|
84
|
+
* import { SharedModule } from 'shared/shared.module';
|
85
|
+
* it('mounts', () => {
|
86
|
+
* mount(StepperComponent, {
|
87
|
+
* providers: [MyService],
|
88
|
+
* imports: [SharedModule]
|
89
|
+
* })
|
90
|
+
* cy.get('[data-cy=increment]').click()
|
91
|
+
* cy.get('[data-cy=counter]').should('have.text', '1')
|
92
|
+
* })
|
93
|
+
*
|
94
|
+
* // or
|
95
|
+
*
|
96
|
+
* it('mounts with template', () => {
|
97
|
+
* mount('<app-stepper></app-stepper>', {
|
98
|
+
* declarations: [StepperComponent],
|
99
|
+
* })
|
100
|
+
* })
|
101
|
+
*
|
102
|
+
* @see {@link https://on.cypress.io/mounting-angular} for more details.
|
103
|
+
*
|
104
|
+
* @returns A component and component fixture
|
105
|
+
*/
|
106
|
+
declare function mount<T>(component: Type<T> | string, config?: MountConfig<T>): Cypress.Chainable<MountResponse<T>>;
|
107
|
+
/**
|
108
|
+
* Creates a new Event Emitter and then spies on it's `emit` method
|
109
|
+
*
|
110
|
+
* @param {string} alias name you want to use for your cy.spy() alias
|
111
|
+
* @returns EventEmitter<T>
|
112
|
+
* @example
|
113
|
+
* import { StepperComponent } from './stepper.component'
|
114
|
+
* import { mount, createOutputSpy } from '@cypress/angular'
|
115
|
+
*
|
116
|
+
* it('Has spy', () => {
|
117
|
+
* mount(StepperComponent, { change: createOutputSpy('changeSpy') })
|
118
|
+
* cy.get('[data-cy=increment]').click()
|
119
|
+
* cy.get('@changeSpy').should('have.been.called')
|
120
|
+
* })
|
121
|
+
*/
|
122
|
+
declare const createOutputSpy: <T>(alias: string) => any;
|
123
|
+
|
124
|
+
export { MountConfig, MountResponse, createOutputSpy, mount };
|
package/angular/dist/index.js
CHANGED
@@ -47,27 +47,11 @@ function __decorate(decorators, target, key, desc) {
|
|
47
47
|
}
|
48
48
|
|
49
49
|
/**
|
50
|
-
*
|
51
|
-
*
|
52
|
-
*
|
50
|
+
* Utility function to register CT side effects and run cleanup code during the "test:before:run" Cypress hook
|
51
|
+
* @param optionalCallback Callback to be called before the next test runs
|
53
52
|
*/
|
54
|
-
function cleanupStyles() {
|
55
|
-
const styles = document.body.querySelectorAll('[data-cy=injected-style-tag]');
|
56
|
-
styles.forEach((styleElement) => {
|
57
|
-
if (styleElement.parentElement) {
|
58
|
-
styleElement.parentElement.removeChild(styleElement);
|
59
|
-
}
|
60
|
-
});
|
61
|
-
const links = document.body.querySelectorAll('[data-cy=injected-stylesheet]');
|
62
|
-
links.forEach((link) => {
|
63
|
-
if (link.parentElement) {
|
64
|
-
link.parentElement.removeChild(link);
|
65
|
-
}
|
66
|
-
});
|
67
|
-
}
|
68
53
|
function setupHooks(optionalCallback) {
|
69
|
-
//
|
70
|
-
// file that is imported by e2e and component support files by default. We don't want CT side effects to run when e2e
|
54
|
+
// We don't want CT side effects to run when e2e
|
71
55
|
// testing so we early return.
|
72
56
|
// System test to verify CT side effects do not pollute e2e: system-tests/test/e2e_with_mount_import_spec.ts
|
73
57
|
if (Cypress.testingType !== 'component') {
|
@@ -82,7 +66,6 @@ function setupHooks(optionalCallback) {
|
|
82
66
|
// @ts-ignore
|
83
67
|
Cypress.on('test:before:run', () => {
|
84
68
|
optionalCallback === null || optionalCallback === void 0 ? void 0 : optionalCallback();
|
85
|
-
cleanupStyles();
|
86
69
|
});
|
87
70
|
}
|
88
71
|
|
@@ -91,6 +74,20 @@ function setupHooks(optionalCallback) {
|
|
91
74
|
*/
|
92
75
|
// @ts-ignore
|
93
76
|
window.Mocha['__zone_patch__'] = false;
|
77
|
+
let activeFixture = null;
|
78
|
+
function cleanup() {
|
79
|
+
// Not public, we need to call this to remove the last component from the DOM
|
80
|
+
try {
|
81
|
+
getTestBed().tearDownTestingModule();
|
82
|
+
}
|
83
|
+
catch (e) {
|
84
|
+
const notSupportedError = new Error(`Failed to teardown component. The version of Angular you are using may not be officially supported.`);
|
85
|
+
notSupportedError.docsUrl = 'https://on.cypress.io/component-framework-configuration';
|
86
|
+
throw notSupportedError;
|
87
|
+
}
|
88
|
+
getTestBed().resetTestingModule();
|
89
|
+
activeFixture = null;
|
90
|
+
}
|
94
91
|
// 'zone.js/testing' is not properly aliasing `it.skip` but it does provide `xit`/`xspecify`
|
95
92
|
// Written up under https://github.com/angular/angular/issues/46297 but is not seeing movement
|
96
93
|
// so we'll patch here pending a fix in that library
|
@@ -111,6 +108,7 @@ CypressAngularErrorHandler = __decorate([
|
|
111
108
|
* @returns {MountConfig} MountConfig
|
112
109
|
*/
|
113
110
|
function bootstrapModule(component, config) {
|
111
|
+
var _a;
|
114
112
|
const testModuleMetaData = __rest(config, ["componentProperties"]);
|
115
113
|
if (!testModuleMetaData.declarations) {
|
116
114
|
testModuleMetaData.declarations = [];
|
@@ -128,7 +126,7 @@ function bootstrapModule(component, config) {
|
|
128
126
|
useClass: CypressAngularErrorHandler,
|
129
127
|
});
|
130
128
|
// check if the component is a standalone component
|
131
|
-
if (component.ɵcmp.standalone) {
|
129
|
+
if ((_a = component.ɵcmp) === null || _a === void 0 ? void 0 : _a.standalone) {
|
132
130
|
testModuleMetaData.imports.push(component);
|
133
131
|
}
|
134
132
|
else {
|
@@ -147,16 +145,8 @@ function bootstrapModule(component, config) {
|
|
147
145
|
* @returns {Type<T>} componentFixture
|
148
146
|
*/
|
149
147
|
function initTestBed(component, config) {
|
150
|
-
const { providers } = config, configRest = __rest(config, ["providers"]);
|
151
148
|
const componentFixture = createComponentFixture(component);
|
152
|
-
getTestBed().configureTestingModule(Object.assign({}, bootstrapModule(componentFixture,
|
153
|
-
if (providers != null) {
|
154
|
-
getTestBed().overrideComponent(componentFixture, {
|
155
|
-
add: {
|
156
|
-
providers,
|
157
|
-
},
|
158
|
-
});
|
159
|
-
}
|
149
|
+
getTestBed().configureTestingModule(Object.assign({}, bootstrapModule(componentFixture, config)));
|
160
150
|
return componentFixture;
|
161
151
|
}
|
162
152
|
let WrapperComponent = class WrapperComponent {
|
@@ -189,6 +179,7 @@ function createComponentFixture(component) {
|
|
189
179
|
*/
|
190
180
|
function setupFixture(component, config) {
|
191
181
|
const fixture = getTestBed().createComponent(component);
|
182
|
+
setupComponent(config, fixture);
|
192
183
|
fixture.whenStable().then(() => {
|
193
184
|
var _a;
|
194
185
|
fixture.autoDetectChanges((_a = config.autoDetectChanges) !== null && _a !== void 0 ? _a : true);
|
@@ -208,7 +199,7 @@ function setupComponent(config, fixture) {
|
|
208
199
|
component = Object.assign(component, config.componentProperties);
|
209
200
|
}
|
210
201
|
if (config.autoSpyOutputs) {
|
211
|
-
Object.keys(component).forEach((key
|
202
|
+
Object.keys(component).forEach((key) => {
|
212
203
|
const property = component[key];
|
213
204
|
if (property instanceof EventEmitter) {
|
214
205
|
component[key] = createOutputSpy(`${key}Spy`);
|
@@ -228,44 +219,48 @@ function setupComponent(config, fixture) {
|
|
228
219
|
component.ngOnChanges(simpleChanges);
|
229
220
|
}
|
230
221
|
}
|
231
|
-
return component;
|
232
222
|
}
|
233
223
|
/**
|
234
224
|
* Mounts an Angular component inside Cypress browser
|
235
225
|
*
|
236
|
-
* @param
|
237
|
-
* @param
|
226
|
+
* @param component Angular component being mounted or its template
|
227
|
+
* @param config configuration used to configure the TestBed
|
238
228
|
* @example
|
239
|
-
* import {
|
229
|
+
* import { mount } from '@cypress/angular'
|
230
|
+
* import { StepperComponent } from './stepper.component'
|
240
231
|
* import { MyService } from 'services/my.service'
|
241
232
|
* import { SharedModule } from 'shared/shared.module';
|
242
|
-
*
|
243
|
-
*
|
244
|
-
*
|
245
|
-
*
|
246
|
-
*
|
247
|
-
*
|
248
|
-
*
|
233
|
+
* it('mounts', () => {
|
234
|
+
* mount(StepperComponent, {
|
235
|
+
* providers: [MyService],
|
236
|
+
* imports: [SharedModule]
|
237
|
+
* })
|
238
|
+
* cy.get('[data-cy=increment]').click()
|
239
|
+
* cy.get('[data-cy=counter]').should('have.text', '1')
|
249
240
|
* })
|
250
241
|
*
|
251
|
-
* or
|
242
|
+
* // or
|
252
243
|
*
|
253
|
-
* it('
|
254
|
-
*
|
255
|
-
*
|
256
|
-
*
|
257
|
-
* imports: [SharedModule]
|
258
|
-
* })
|
244
|
+
* it('mounts with template', () => {
|
245
|
+
* mount('<app-stepper></app-stepper>', {
|
246
|
+
* declarations: [StepperComponent],
|
247
|
+
* })
|
259
248
|
* })
|
260
|
-
*
|
249
|
+
*
|
250
|
+
* @see {@link https://on.cypress.io/mounting-angular} for more details.
|
251
|
+
*
|
252
|
+
* @returns A component and component fixture
|
261
253
|
*/
|
262
254
|
function mount(component, config = {}) {
|
255
|
+
// Remove last mounted component if cy.mount is called more than once in a test
|
256
|
+
if (activeFixture) {
|
257
|
+
cleanup();
|
258
|
+
}
|
263
259
|
const componentFixture = initTestBed(component, config);
|
264
|
-
|
265
|
-
const componentInstance = setupComponent(config, fixture);
|
260
|
+
activeFixture = setupFixture(componentFixture, config);
|
266
261
|
const mountResponse = {
|
267
|
-
fixture,
|
268
|
-
component: componentInstance,
|
262
|
+
fixture: activeFixture,
|
263
|
+
component: activeFixture.componentInstance,
|
269
264
|
};
|
270
265
|
const logMessage = typeof component === 'string' ? 'Component' : componentFixture.name;
|
271
266
|
Cypress.log({
|
@@ -280,6 +275,15 @@ function mount(component, config = {}) {
|
|
280
275
|
*
|
281
276
|
* @param {string} alias name you want to use for your cy.spy() alias
|
282
277
|
* @returns EventEmitter<T>
|
278
|
+
* @example
|
279
|
+
* import { StepperComponent } from './stepper.component'
|
280
|
+
* import { mount, createOutputSpy } from '@cypress/angular'
|
281
|
+
*
|
282
|
+
* it('Has spy', () => {
|
283
|
+
* mount(StepperComponent, { change: createOutputSpy('changeSpy') })
|
284
|
+
* cy.get('[data-cy=increment]').click()
|
285
|
+
* cy.get('@changeSpy').should('have.been.called')
|
286
|
+
* })
|
283
287
|
*/
|
284
288
|
const createOutputSpy = (alias) => {
|
285
289
|
const emitter = new EventEmitter();
|
@@ -290,10 +294,6 @@ const createOutputSpy = (alias) => {
|
|
290
294
|
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
|
291
295
|
teardown: { destroyAfterEach: false },
|
292
296
|
});
|
293
|
-
setupHooks(
|
294
|
-
// Not public, we need to call this to remove the last component from the DOM
|
295
|
-
getTestBed()['tearDownTestingModule']();
|
296
|
-
getTestBed().resetTestingModule();
|
297
|
-
});
|
297
|
+
setupHooks(cleanup);
|
298
298
|
|
299
299
|
export { createOutputSpy, mount };
|
package/lib/cli.js
CHANGED
@@ -331,9 +331,23 @@ module.exports = {
|
|
331
331
|
}
|
332
332
|
|
333
333
|
const {
|
334
|
-
CYPRESS_INTERNAL_ENV
|
334
|
+
CYPRESS_INTERNAL_ENV,
|
335
|
+
CYPRESS_DOWNLOAD_USE_CA
|
335
336
|
} = process.env;
|
336
337
|
|
338
|
+
if (process.env.CYPRESS_DOWNLOAD_USE_CA) {
|
339
|
+
let msg = `
|
340
|
+
${logSymbols.warning} Warning: It looks like you're setting CYPRESS_DOWNLOAD_USE_CA=${CYPRESS_DOWNLOAD_USE_CA}
|
341
|
+
|
342
|
+
The environment variable "CYPRESS_DOWNLOAD_USE_CA" is no longer required to be set.
|
343
|
+
|
344
|
+
You can safely unset this environment variable.
|
345
|
+
`;
|
346
|
+
logger.log();
|
347
|
+
logger.warn(stripIndent(msg));
|
348
|
+
logger.log();
|
349
|
+
}
|
350
|
+
|
337
351
|
if (!util.isValidCypressInternalEnvValue(CYPRESS_INTERNAL_ENV)) {
|
338
352
|
debug('invalid CYPRESS_INTERNAL_ENV value', CYPRESS_INTERNAL_ENV);
|
339
353
|
return errors.exitWithError(errors.errors.invalidCypressEnv)(`CYPRESS_INTERNAL_ENV=${CYPRESS_INTERNAL_ENV}`);
|
package/lib/tasks/download.js
CHANGED
@@ -56,18 +56,14 @@ const getBaseUrl = () => {
|
|
56
56
|
|
57
57
|
const getCA = () => {
|
58
58
|
return new Promise(resolve => {
|
59
|
-
if (
|
60
|
-
resolve();
|
61
|
-
}
|
62
|
-
|
63
|
-
if (process.env.npm_config_ca) {
|
64
|
-
resolve(process.env.npm_config_ca);
|
65
|
-
} else if (process.env.npm_config_cafile) {
|
59
|
+
if (process.env.npm_config_cafile) {
|
66
60
|
fs.readFile(process.env.npm_config_cafile, 'utf8').then(cafileContent => {
|
67
61
|
resolve(cafileContent);
|
68
62
|
}).catch(() => {
|
69
63
|
resolve();
|
70
64
|
});
|
65
|
+
} else if (process.env.npm_config_ca) {
|
66
|
+
resolve(process.env.npm_config_ca);
|
71
67
|
} else {
|
72
68
|
resolve();
|
73
69
|
}
|
package/lib/util.js
CHANGED
@@ -151,7 +151,7 @@ function isValidCypressInternalEnvValue(value) {
|
|
151
151
|
if (_.isUndefined(value)) {
|
152
152
|
// will get default value
|
153
153
|
return true;
|
154
|
-
} // names of config environments, see "packages/server/config/app.
|
154
|
+
} // names of config environments, see "packages/server/config/app.json"
|
155
155
|
|
156
156
|
|
157
157
|
const names = ['development', 'test', 'staging', 'production'];
|
@@ -245,7 +245,7 @@ const getApplicationDataFolder = (...paths) => {
|
|
245
245
|
env
|
246
246
|
} = process; // allow overriding the app_data folder
|
247
247
|
|
248
|
-
let folder = env.
|
248
|
+
let folder = env.CYPRESS_CONFIG_ENV || env.CYPRESS_INTERNAL_ENV || 'development';
|
249
249
|
const PRODUCT_NAME = pkg.productName || pkg.name;
|
250
250
|
const OS_DATA_PATH = ospath.data();
|
251
251
|
const ELECTRON_APP_DATA_PATH = path.join(OS_DATA_PATH, PRODUCT_NAME);
|
package/mount-utils/CHANGELOG.md
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
# [@cypress/mount-utils-v3.0.0](https://github.com/cypress-io/cypress/compare/@cypress/mount-utils-v2.1.0...@cypress/mount-utils-v3.0.0) (2022-11-07)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* remove dependence on @cypress/<dep> types ([#24415](https://github.com/cypress-io/cypress/issues/24415)) ([58e0ab9](https://github.com/cypress-io/cypress/commit/58e0ab91604618ea6f75932622f7e66e419270e6))
|
7
|
+
* remove last mounted component upon subsequent mount calls ([#24470](https://github.com/cypress-io/cypress/issues/24470)) ([f39eb1c](https://github.com/cypress-io/cypress/commit/f39eb1c19e0923bda7ae263168fc6448da942d54))
|
8
|
+
* remove some CT functions and props ([#24419](https://github.com/cypress-io/cypress/issues/24419)) ([294985f](https://github.com/cypress-io/cypress/commit/294985f8b3e0fa00ed66d25f88c8814603766074))
|
9
|
+
|
10
|
+
|
11
|
+
### BREAKING CHANGES
|
12
|
+
|
13
|
+
* remove last mounted component upon subsequent mount calls of mount
|
14
|
+
|
1
15
|
# [@cypress/mount-utils-v2.1.0](https://github.com/cypress-io/cypress/compare/@cypress/mount-utils-v2.0.1...@cypress/mount-utils-v2.1.0) (2022-08-30)
|
2
16
|
|
3
17
|
|
package/mount-utils/README.md
CHANGED
@@ -25,11 +25,7 @@ All the functionality used to create the first party Mount adapters is available
|
|
25
25
|
|
26
26
|
In addition, we recommend that Mount Adapters:
|
27
27
|
|
28
|
-
-
|
29
|
-
- calls `injectStylesBeforeElement` from `@cypress/mount-utils` before mounting the component
|
30
|
-
- calls `setupHooks` to register the required lifecycle hooks for `@cypress/mount-utils` to work
|
31
|
-
|
32
|
-
This will let the user inject styles `<style>...</style>` and stylesheets `<link rel="stylesheet">`, which is very useful for developing components.
|
28
|
+
- call `setupHooks` to register the required lifecycle hooks for `@cypress/mount-utils` to work
|
33
29
|
|
34
30
|
### Example Mount Adapter: Web Components
|
35
31
|
|
@@ -39,9 +35,7 @@ Here's a simple yet realistic example of Mount Adapter targeting Web Components.
|
|
39
35
|
import {
|
40
36
|
ROOT_SELECTOR,
|
41
37
|
setupHooks,
|
42
|
-
|
43
|
-
getContainerEl,
|
44
|
-
StyleOptions
|
38
|
+
getContainerEl
|
45
39
|
} from "@cypress/mount-utils";
|
46
40
|
|
47
41
|
Cypress.on("run:start", () => {
|
@@ -69,8 +63,7 @@ function maybeRegisterComponent<T extends CustomElementConstructor>(
|
|
69
63
|
}
|
70
64
|
|
71
65
|
export function mount(
|
72
|
-
webComponent: CustomElementConstructor
|
73
|
-
options?: Partial<StyleOptions>
|
66
|
+
webComponent: CustomElementConstructor
|
74
67
|
): Cypress.Chainable {
|
75
68
|
// Get root selector defined in `cypress/support.component-index.html
|
76
69
|
const $root = document.querySelector(ROOT_SELECTOR)!;
|
@@ -83,9 +76,6 @@ export function mount(
|
|
83
76
|
/// Register Web Component
|
84
77
|
maybeRegisterComponent(name, webComponent);
|
85
78
|
|
86
|
-
// Inject user styles before mounting the component
|
87
|
-
injectStylesBeforeElement(options ?? {}, document, getContainerEl())
|
88
|
-
|
89
79
|
// Render HTML containing component.
|
90
80
|
$root.innerHTML = `<${name} id="root"></${name}>`;
|
91
81
|
|
@@ -100,8 +90,7 @@ export function mount(
|
|
100
90
|
return cy.wrap(document.querySelector("#root"), { log: false });
|
101
91
|
}
|
102
92
|
|
103
|
-
// Setup Cypress lifecycle hooks.
|
104
|
-
// injected by injectStylesBeforeElement, etc.
|
93
|
+
// Setup Cypress lifecycle hooks.
|
105
94
|
setupHooks();
|
106
95
|
```
|
107
96
|
|
@@ -131,14 +120,7 @@ export class WebCounter extends HTMLElement {
|
|
131
120
|
|
132
121
|
describe('web-component.cy.ts', () => {
|
133
122
|
it('playground', () => {
|
134
|
-
cy.mount(WebCounter
|
135
|
-
styles: `
|
136
|
-
button {
|
137
|
-
background: lightblue;
|
138
|
-
color: white;
|
139
|
-
}
|
140
|
-
`
|
141
|
-
})
|
123
|
+
cy.mount(WebCounter)
|
142
124
|
})
|
143
125
|
})
|
144
126
|
```
|
@@ -1,54 +1,40 @@
|
|
1
|
+
export declare const ROOT_SELECTOR = "[data-cy-root]";
|
1
2
|
/**
|
2
|
-
*
|
3
|
-
*
|
4
|
-
*
|
3
|
+
* Gets the root element used to mount the component.
|
4
|
+
* @returns {HTMLElement} The root element
|
5
|
+
* @throws {Error} If the root element is not found
|
5
6
|
*/
|
6
|
-
export interface StyleOptions {
|
7
|
-
/**
|
8
|
-
* Creates <link href="..." /> element for each stylesheet
|
9
|
-
* @alias stylesheet
|
10
|
-
*/
|
11
|
-
stylesheets: string | string[];
|
12
|
-
/**
|
13
|
-
* Creates <link href="..." /> element for each stylesheet
|
14
|
-
* @alias stylesheets
|
15
|
-
*/
|
16
|
-
stylesheet: string | string[];
|
17
|
-
/**
|
18
|
-
* Creates <style>...</style> element and inserts given CSS.
|
19
|
-
* @alias styles
|
20
|
-
*/
|
21
|
-
style: string | string[];
|
22
|
-
/**
|
23
|
-
* Creates <style>...</style> element for each given CSS text.
|
24
|
-
* @alias style
|
25
|
-
*/
|
26
|
-
styles: string | string[];
|
27
|
-
/**
|
28
|
-
* Loads each file and creates a <style>...</style> element
|
29
|
-
* with the loaded CSS
|
30
|
-
* @alias cssFile
|
31
|
-
*/
|
32
|
-
cssFiles: string | string[];
|
33
|
-
/**
|
34
|
-
* Single CSS file to load into a <style></style> element
|
35
|
-
* @alias cssFile
|
36
|
-
*/
|
37
|
-
cssFile: string | string[];
|
38
|
-
}
|
39
|
-
export declare const ROOT_SELECTOR = "[data-cy-root]";
|
40
7
|
export declare const getContainerEl: () => HTMLElement;
|
8
|
+
export declare function checkForRemovedStyleOptions(mountingOptions: Record<string, any>): void;
|
9
|
+
/**
|
10
|
+
* Utility function to register CT side effects and run cleanup code during the "test:before:run" Cypress hook
|
11
|
+
* @param optionalCallback Callback to be called before the next test runs
|
12
|
+
*/
|
13
|
+
export declare function setupHooks(optionalCallback?: Function): void;
|
41
14
|
/**
|
42
15
|
* Remove any style or extra link elements from the iframe placeholder
|
43
16
|
* left from any previous test
|
44
17
|
*
|
18
|
+
* Removed as of Cypress 11.0.0
|
19
|
+
* @see https://on.cypress.io/migration-11-0-0-component-testing-updates
|
45
20
|
*/
|
46
21
|
export declare function cleanupStyles(): void;
|
22
|
+
/**
|
23
|
+
* Additional styles to inject into the document.
|
24
|
+
* A component might need 3rd party libraries from CDN,
|
25
|
+
* local CSS files and custom styles.
|
26
|
+
*
|
27
|
+
* Removed as of Cypress 11.0.0.
|
28
|
+
* @see https://on.cypress.io/migration-11-0-0-component-testing-updates
|
29
|
+
*/
|
30
|
+
export declare type StyleOptions = unknown;
|
47
31
|
/**
|
48
32
|
* Injects custom style text or CSS file or 3rd party style resources
|
49
33
|
* into the given document.
|
34
|
+
*
|
35
|
+
* Removed as of Cypress 11.0.0.
|
36
|
+
* @see https://on.cypress.io/migration-11-0-0-component-testing-updates
|
50
37
|
*/
|
51
38
|
export declare const injectStylesBeforeElement: (options: Partial<StyleOptions & {
|
52
39
|
log: boolean;
|
53
|
-
}>, document: Document, el: HTMLElement | null) =>
|
54
|
-
export declare function setupHooks(optionalCallback?: Function): void;
|
40
|
+
}>, document: Document, el: HTMLElement | null) => void;
|