cypress 10.4.0 → 10.7.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/angular/CHANGELOG.md +86 -0
- package/angular/README.md +85 -0
- package/angular/dist/index.d.ts +1 -0
- package/angular/dist/index.js +265 -0
- package/angular/dist/mount.d.ts +112 -0
- package/angular/package.json +68 -0
- package/lib/tasks/download.js +4 -3
- package/mount-utils/CHANGELOG.md +7 -0
- package/mount-utils/package.json +5 -1
- package/package.json +16 -4
- package/react/CHANGELOG.md +20 -0
- package/react/dist/createMount.d.ts +7 -6
- package/react/dist/cypress-react.cjs.js +653 -140
- package/react/dist/cypress-react.esm-bundler.js +640 -127
- package/react/dist/mount.d.ts +2 -1
- package/react/dist/mountHook.d.ts +1 -0
- package/react/dist/types.d.ts +2 -7
- package/react/package.json +4 -6
- package/react18/CHANGELOG.md +13 -0
- package/react18/dist/cypress-react.cjs.js +300 -118
- package/react18/dist/cypress-react.esm-bundler.js +286 -104
- package/react18/dist/index.d.ts +2 -1
- package/react18/package.json +2 -2
- package/svelte/CHANGELOG.md +0 -0
- package/svelte/README.md +83 -0
- package/svelte/dist/cypress-svelte.cjs.js +213 -0
- package/svelte/dist/cypress-svelte.esm-bundler.js +209 -0
- package/svelte/dist/index.d.ts +1 -0
- package/svelte/dist/mount.d.ts +30 -0
- package/svelte/package.json +43 -0
- package/types/cypress-type-helpers.d.ts +3 -1
- package/types/cypress.d.ts +61 -5
- package/vue/CHANGELOG.md +14 -0
- package/vue/dist/cypress-vue.cjs.js +30 -38
- package/vue/dist/cypress-vue.esm-bundler.js +30 -38
- package/vue/dist/index.d.ts +1 -0
- package/vue/package.json +2 -8
- package/vue2/CHANGELOG.md +7 -0
- package/vue2/dist/cypress-vue2.cjs.js +53 -84
- package/vue2/dist/cypress-vue2.esm-bundler.js +53 -84
- package/vue2/dist/index.d.ts +1 -0
- package/vue2/package.json +2 -5
- package/vue2/dist/cypress-vue2.browser.js +0 -20197
@@ -0,0 +1,86 @@
|
|
1
|
+
# @cypress/angular-v1.0.0 (2022-08-17)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* **angular:** set rxjs versions > 6.6.0 as dependency ([#16676](https://github.com/cypress-io/cypress/issues/16676)) ([46de81e](https://github.com/cypress-io/cypress/commit/46de81e75fd18bc37cb884e9a751106fff4d08ad))
|
7
|
+
* remove dependency causing semantic-release to fail ([#23142](https://github.com/cypress-io/cypress/issues/23142)) ([20f89bf](https://github.com/cypress-io/cypress/commit/20f89bfa32636baa8922896e719962c703129abd))
|
8
|
+
* scaffold correct config file ([#19776](https://github.com/cypress-io/cypress/issues/19776)) ([8f32960](https://github.com/cypress-io/cypress/commit/8f32960ef803f539f065d41f01fff33bfe33ed5d))
|
9
|
+
* scope config to current testing type ([#20677](https://github.com/cypress-io/cypress/issues/20677)) ([61f7cfc](https://github.com/cypress-io/cypress/commit/61f7cfc59284a2938e0a1c15d74ee75215ba5f8b))
|
10
|
+
* terminal error message for non migrated config ([#21467](https://github.com/cypress-io/cypress/issues/21467)) ([3274da7](https://github.com/cypress-io/cypress/commit/3274da7842f5ef1ddad62b1c630d0ff9120e4289))
|
11
|
+
* update scaffold template to use correct path ([#20047](https://github.com/cypress-io/cypress/issues/20047)) ([6e80359](https://github.com/cypress-io/cypress/commit/6e803597a379222cf936e5977c8314d693ee1912))
|
12
|
+
|
13
|
+
|
14
|
+
### Features
|
15
|
+
|
16
|
+
* add devServer to config file ([#18962](https://github.com/cypress-io/cypress/issues/18962)) ([2573375](https://github.com/cypress-io/cypress/commit/2573375b5b6616efd2d213a94cd55fd8e0385864))
|
17
|
+
* add template support, teardown & standalone ([#23117](https://github.com/cypress-io/cypress/issues/23117)) ([d201b37](https://github.com/cypress-io/cypress/commit/d201b37b3d6b1e37a15a8d21d853acca47bfc666))
|
18
|
+
* **angular:** angular mount ([#22858](https://github.com/cypress-io/cypress/issues/22858)) ([4131b1f](https://github.com/cypress-io/cypress/commit/4131b1fa8482ae08113bef337965baa1ac12f66c))
|
19
|
+
* Deprecate run-ct / open-ct, and update all examples to use --ct instead ([#18422](https://github.com/cypress-io/cypress/issues/18422)) ([196e8f6](https://github.com/cypress-io/cypress/commit/196e8f62cc6d27974f235945cb5700624b3dae41))
|
20
|
+
* enable Angular CT support ([#23089](https://github.com/cypress-io/cypress/issues/23089)) ([94e78eb](https://github.com/cypress-io/cypress/commit/94e78eba0430eae97529058c40611e5f24dbf140))
|
21
|
+
* ProjectLifecycleManager & general launchpad cleanup ([#19347](https://github.com/cypress-io/cypress/issues/19347)) ([4626f74](https://github.com/cypress-io/cypress/commit/4626f7481c9904fec484aa167a02e0197a3095c4))
|
22
|
+
* remove testFiles reference ([#20565](https://github.com/cypress-io/cypress/issues/20565)) ([5670344](https://github.com/cypress-io/cypress/commit/567034459089d9d53dfab5556cb9369fb335c3db))
|
23
|
+
* support specPattern, deprecate integrationFolder and componentFolder ([#19319](https://github.com/cypress-io/cypress/issues/19319)) ([792980a](https://github.com/cypress-io/cypress/commit/792980ac12746ef47b9c944ebe4c6c353a187ab2))
|
24
|
+
* support webpack-dev-server v4 ([#17918](https://github.com/cypress-io/cypress/issues/17918)) ([16e4759](https://github.com/cypress-io/cypress/commit/16e4759e0196f68c5f0525efb020211337748f94))
|
25
|
+
* 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))
|
26
|
+
* Use .config files ([#18578](https://github.com/cypress-io/cypress/issues/18578)) ([081dd19](https://github.com/cypress-io/cypress/commit/081dd19cc6da3da229a7af9c84f62730c85a5cd6))
|
27
|
+
* use devServer instad of startDevServer ([#20092](https://github.com/cypress-io/cypress/issues/20092)) ([8a6768f](https://github.com/cypress-io/cypress/commit/8a6768fee6f46b908c5a9daf23da8b804a6c627f))
|
28
|
+
* use hoisted yarn install in binary build ([#17285](https://github.com/cypress-io/cypress/issues/17285)) ([e4f5b10](https://github.com/cypress-io/cypress/commit/e4f5b106d49d6ac0857c5fdac886f83b99558c88))
|
29
|
+
* Use plugins on config files ([#18798](https://github.com/cypress-io/cypress/issues/18798)) ([bb8251b](https://github.com/cypress-io/cypress/commit/bb8251b752ac44f1184f9160194cf12d41fc867f))
|
30
|
+
* use supportFile by testingType ([#19364](https://github.com/cypress-io/cypress/issues/19364)) ([0366d4f](https://github.com/cypress-io/cypress/commit/0366d4fa8971e5e5189c6fd6450cc3c8d72dcfe1))
|
31
|
+
|
32
|
+
# @cypress/angular-v1.0.0 (2022-08-04)
|
33
|
+
|
34
|
+
|
35
|
+
### Bug Fixes
|
36
|
+
|
37
|
+
* **angular:** set rxjs versions > 6.6.0 as dependency ([#16676](https://github.com/cypress-io/cypress/issues/16676)) ([46de81e](https://github.com/cypress-io/cypress/commit/46de81e75fd18bc37cb884e9a751106fff4d08ad))
|
38
|
+
* scaffold correct config file ([#19776](https://github.com/cypress-io/cypress/issues/19776)) ([8f32960](https://github.com/cypress-io/cypress/commit/8f32960ef803f539f065d41f01fff33bfe33ed5d))
|
39
|
+
* scope config to current testing type ([#20677](https://github.com/cypress-io/cypress/issues/20677)) ([61f7cfc](https://github.com/cypress-io/cypress/commit/61f7cfc59284a2938e0a1c15d74ee75215ba5f8b))
|
40
|
+
* terminal error message for non migrated config ([#21467](https://github.com/cypress-io/cypress/issues/21467)) ([3274da7](https://github.com/cypress-io/cypress/commit/3274da7842f5ef1ddad62b1c630d0ff9120e4289))
|
41
|
+
* update scaffold template to use correct path ([#20047](https://github.com/cypress-io/cypress/issues/20047)) ([6e80359](https://github.com/cypress-io/cypress/commit/6e803597a379222cf936e5977c8314d693ee1912))
|
42
|
+
|
43
|
+
|
44
|
+
### Features
|
45
|
+
|
46
|
+
* add devServer to config file ([#18962](https://github.com/cypress-io/cypress/issues/18962)) ([2573375](https://github.com/cypress-io/cypress/commit/2573375b5b6616efd2d213a94cd55fd8e0385864))
|
47
|
+
* **angular:** angular mount ([#22858](https://github.com/cypress-io/cypress/issues/22858)) ([4131b1f](https://github.com/cypress-io/cypress/commit/4131b1fa8482ae08113bef337965baa1ac12f66c))
|
48
|
+
* Deprecate run-ct / open-ct, and update all examples to use --ct instead ([#18422](https://github.com/cypress-io/cypress/issues/18422)) ([196e8f6](https://github.com/cypress-io/cypress/commit/196e8f62cc6d27974f235945cb5700624b3dae41))
|
49
|
+
* ProjectLifecycleManager & general launchpad cleanup ([#19347](https://github.com/cypress-io/cypress/issues/19347)) ([4626f74](https://github.com/cypress-io/cypress/commit/4626f7481c9904fec484aa167a02e0197a3095c4))
|
50
|
+
* remove testFiles reference ([#20565](https://github.com/cypress-io/cypress/issues/20565)) ([5670344](https://github.com/cypress-io/cypress/commit/567034459089d9d53dfab5556cb9369fb335c3db))
|
51
|
+
* support specPattern, deprecate integrationFolder and componentFolder ([#19319](https://github.com/cypress-io/cypress/issues/19319)) ([792980a](https://github.com/cypress-io/cypress/commit/792980ac12746ef47b9c944ebe4c6c353a187ab2))
|
52
|
+
* support webpack-dev-server v4 ([#17918](https://github.com/cypress-io/cypress/issues/17918)) ([16e4759](https://github.com/cypress-io/cypress/commit/16e4759e0196f68c5f0525efb020211337748f94))
|
53
|
+
* 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))
|
54
|
+
* Use .config files ([#18578](https://github.com/cypress-io/cypress/issues/18578)) ([081dd19](https://github.com/cypress-io/cypress/commit/081dd19cc6da3da229a7af9c84f62730c85a5cd6))
|
55
|
+
* use devServer instad of startDevServer ([#20092](https://github.com/cypress-io/cypress/issues/20092)) ([8a6768f](https://github.com/cypress-io/cypress/commit/8a6768fee6f46b908c5a9daf23da8b804a6c627f))
|
56
|
+
* use hoisted yarn install in binary build ([#17285](https://github.com/cypress-io/cypress/issues/17285)) ([e4f5b10](https://github.com/cypress-io/cypress/commit/e4f5b106d49d6ac0857c5fdac886f83b99558c88))
|
57
|
+
* Use plugins on config files ([#18798](https://github.com/cypress-io/cypress/issues/18798)) ([bb8251b](https://github.com/cypress-io/cypress/commit/bb8251b752ac44f1184f9160194cf12d41fc867f))
|
58
|
+
* use supportFile by testingType ([#19364](https://github.com/cypress-io/cypress/issues/19364)) ([0366d4f](https://github.com/cypress-io/cypress/commit/0366d4fa8971e5e5189c6fd6450cc3c8d72dcfe1))
|
59
|
+
|
60
|
+
# @cypress/angular-v1.0.0 (2022-08-04)
|
61
|
+
|
62
|
+
|
63
|
+
### Bug Fixes
|
64
|
+
|
65
|
+
* **angular:** set rxjs versions > 6.6.0 as dependency ([#16676](https://github.com/cypress-io/cypress/issues/16676)) ([46de81e](https://github.com/cypress-io/cypress/commit/46de81e75fd18bc37cb884e9a751106fff4d08ad))
|
66
|
+
* scaffold correct config file ([#19776](https://github.com/cypress-io/cypress/issues/19776)) ([8f32960](https://github.com/cypress-io/cypress/commit/8f32960ef803f539f065d41f01fff33bfe33ed5d))
|
67
|
+
* scope config to current testing type ([#20677](https://github.com/cypress-io/cypress/issues/20677)) ([61f7cfc](https://github.com/cypress-io/cypress/commit/61f7cfc59284a2938e0a1c15d74ee75215ba5f8b))
|
68
|
+
* terminal error message for non migrated config ([#21467](https://github.com/cypress-io/cypress/issues/21467)) ([3274da7](https://github.com/cypress-io/cypress/commit/3274da7842f5ef1ddad62b1c630d0ff9120e4289))
|
69
|
+
* update scaffold template to use correct path ([#20047](https://github.com/cypress-io/cypress/issues/20047)) ([6e80359](https://github.com/cypress-io/cypress/commit/6e803597a379222cf936e5977c8314d693ee1912))
|
70
|
+
|
71
|
+
|
72
|
+
### Features
|
73
|
+
|
74
|
+
* add devServer to config file ([#18962](https://github.com/cypress-io/cypress/issues/18962)) ([2573375](https://github.com/cypress-io/cypress/commit/2573375b5b6616efd2d213a94cd55fd8e0385864))
|
75
|
+
* **angular:** angular mount ([#22858](https://github.com/cypress-io/cypress/issues/22858)) ([4131b1f](https://github.com/cypress-io/cypress/commit/4131b1fa8482ae08113bef337965baa1ac12f66c))
|
76
|
+
* Deprecate run-ct / open-ct, and update all examples to use --ct instead ([#18422](https://github.com/cypress-io/cypress/issues/18422)) ([196e8f6](https://github.com/cypress-io/cypress/commit/196e8f62cc6d27974f235945cb5700624b3dae41))
|
77
|
+
* ProjectLifecycleManager & general launchpad cleanup ([#19347](https://github.com/cypress-io/cypress/issues/19347)) ([4626f74](https://github.com/cypress-io/cypress/commit/4626f7481c9904fec484aa167a02e0197a3095c4))
|
78
|
+
* remove testFiles reference ([#20565](https://github.com/cypress-io/cypress/issues/20565)) ([5670344](https://github.com/cypress-io/cypress/commit/567034459089d9d53dfab5556cb9369fb335c3db))
|
79
|
+
* support specPattern, deprecate integrationFolder and componentFolder ([#19319](https://github.com/cypress-io/cypress/issues/19319)) ([792980a](https://github.com/cypress-io/cypress/commit/792980ac12746ef47b9c944ebe4c6c353a187ab2))
|
80
|
+
* support webpack-dev-server v4 ([#17918](https://github.com/cypress-io/cypress/issues/17918)) ([16e4759](https://github.com/cypress-io/cypress/commit/16e4759e0196f68c5f0525efb020211337748f94))
|
81
|
+
* 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))
|
82
|
+
* Use .config files ([#18578](https://github.com/cypress-io/cypress/issues/18578)) ([081dd19](https://github.com/cypress-io/cypress/commit/081dd19cc6da3da229a7af9c84f62730c85a5cd6))
|
83
|
+
* use devServer instad of startDevServer ([#20092](https://github.com/cypress-io/cypress/issues/20092)) ([8a6768f](https://github.com/cypress-io/cypress/commit/8a6768fee6f46b908c5a9daf23da8b804a6c627f))
|
84
|
+
* use hoisted yarn install in binary build ([#17285](https://github.com/cypress-io/cypress/issues/17285)) ([e4f5b10](https://github.com/cypress-io/cypress/commit/e4f5b106d49d6ac0857c5fdac886f83b99558c88))
|
85
|
+
* Use plugins on config files ([#18798](https://github.com/cypress-io/cypress/issues/18798)) ([bb8251b](https://github.com/cypress-io/cypress/commit/bb8251b752ac44f1184f9160194cf12d41fc867f))
|
86
|
+
* use supportFile by testingType ([#19364](https://github.com/cypress-io/cypress/issues/19364)) ([0366d4f](https://github.com/cypress-io/cypress/commit/0366d4fa8971e5e5189c6fd6450cc3c8d72dcfe1))
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# @cypress/angular
|
2
|
+
|
3
|
+
Mount Angular components in the open source [Cypress.io](https://www.cypress.io/) test runner **v7.0.0+**
|
4
|
+
|
5
|
+
> **Note:** This package is bundled with the `cypress` package and should not need to be installed separately. See the [Angular Component Testing Docs](https://docs.cypress.io/guides/component-testing/quickstart-angular#Configuring-Component-Testing) for mounting Angular components. Installing and importing `mount` from `@cypress/angular` should only be used for advanced use-cases.
|
6
|
+
|
7
|
+
## Install
|
8
|
+
|
9
|
+
- Requires Cypress v7.0.0 or later
|
10
|
+
- Requires [Node](https://nodejs.org/en/) version 12 or above
|
11
|
+
|
12
|
+
```sh
|
13
|
+
npm install --save-dev @cypress/angular
|
14
|
+
```
|
15
|
+
|
16
|
+
## Run
|
17
|
+
|
18
|
+
Open cypress test runner
|
19
|
+
```
|
20
|
+
npx cypress open --component
|
21
|
+
```
|
22
|
+
|
23
|
+
If you need to run test in CI
|
24
|
+
```
|
25
|
+
npx cypress run --component
|
26
|
+
```
|
27
|
+
|
28
|
+
For more information, please check the official docs for [running Cypress](https://on.cypress.io/guides/getting-started/opening-the-app#Quick-Configuration) and for [component testing](https://on.cypress.io/guides/component-testing/writing-your-first-component-test).
|
29
|
+
|
30
|
+
## API
|
31
|
+
|
32
|
+
- `mount` is the most important function, allows to mount a given Angular component as a mini web application and interact with it using Cypress commands
|
33
|
+
- `MountConfig` Configuration used to configure your test
|
34
|
+
- `createOutputSpy` factory function that creates new EventEmitter for your component and spies on it's `emit` method.
|
35
|
+
|
36
|
+
## Examples
|
37
|
+
|
38
|
+
```ts
|
39
|
+
import { mount } from '@cypress/angular'
|
40
|
+
import { HelloWorldComponent } from './hello-world.component'
|
41
|
+
|
42
|
+
describe('HelloWorldComponent', () => {
|
43
|
+
it('works', () => {
|
44
|
+
mount(HelloWorldComponent)
|
45
|
+
// now use standard Cypress commands
|
46
|
+
cy.contains('Hello World!').should('be.visible')
|
47
|
+
})
|
48
|
+
})
|
49
|
+
```
|
50
|
+
|
51
|
+
```ts
|
52
|
+
import { mount } from '@cypress/angular'
|
53
|
+
import { HelloWorldComponent } from './hello-world.component'
|
54
|
+
|
55
|
+
describe('HelloWorldComponent', () => {
|
56
|
+
it('works', () => {
|
57
|
+
mount('<app-hello-world></app-hello-world>', {
|
58
|
+
declarations: [HelloWorldComponent]
|
59
|
+
})
|
60
|
+
// now use standard Cypress commands
|
61
|
+
cy.contains('Hello World!').should('be.visible')
|
62
|
+
})
|
63
|
+
})
|
64
|
+
```
|
65
|
+
|
66
|
+
Look at the examples in [cypress-component-testing-apps](https://github.com/cypress-io/cypress-component-testing-apps) repo. Here in the `angular` and `angular-standalone` folders are the two example applications showing various testing scenarios.
|
67
|
+
|
68
|
+
|
69
|
+
## Compatibility
|
70
|
+
|
71
|
+
| @cypress/angular | cypress |
|
72
|
+
| -------------- | ------- |
|
73
|
+
| >= v1 | >= v10.5 |
|
74
|
+
|
75
|
+
## Development
|
76
|
+
|
77
|
+
Run `yarn build` to compile and sync packages to the `cypress` cli package.
|
78
|
+
|
79
|
+
## License
|
80
|
+
|
81
|
+
[](https://github.com/cypress-io/cypress/blob/master/LICENSE)
|
82
|
+
|
83
|
+
This project is licensed under the terms of the [MIT license](/LICENSE).
|
84
|
+
|
85
|
+
## [Changelog](./CHANGELOG.md)
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './mount';
|
@@ -0,0 +1,265 @@
|
|
1
|
+
|
2
|
+
/**
|
3
|
+
* @cypress/angular v0.0.0-development
|
4
|
+
* (c) 2022 Cypress.io
|
5
|
+
* Released under the MIT License
|
6
|
+
*/
|
7
|
+
|
8
|
+
import 'zone.js';
|
9
|
+
import 'zone.js/testing';
|
10
|
+
import { CommonModule } from '@angular/common';
|
11
|
+
import { Component, EventEmitter } from '@angular/core';
|
12
|
+
import { getTestBed, TestBed } from '@angular/core/testing';
|
13
|
+
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
|
14
|
+
|
15
|
+
/******************************************************************************
|
16
|
+
Copyright (c) Microsoft Corporation.
|
17
|
+
|
18
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
19
|
+
purpose with or without fee is hereby granted.
|
20
|
+
|
21
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
22
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
23
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
24
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
25
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
26
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
27
|
+
PERFORMANCE OF THIS SOFTWARE.
|
28
|
+
***************************************************************************** */
|
29
|
+
|
30
|
+
function __rest(s, e) {
|
31
|
+
var t = {};
|
32
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
33
|
+
t[p] = s[p];
|
34
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
35
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
36
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
37
|
+
t[p[i]] = s[p[i]];
|
38
|
+
}
|
39
|
+
return t;
|
40
|
+
}
|
41
|
+
|
42
|
+
function __decorate(decorators, target, key, desc) {
|
43
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
44
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
45
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
46
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
47
|
+
}
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Remove any style or extra link elements from the iframe placeholder
|
51
|
+
* left from any previous test
|
52
|
+
*
|
53
|
+
*/
|
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
|
+
function setupHooks(optionalCallback) {
|
69
|
+
// Consumed by the framework "mount" libs. A user might register their own mount in the scaffolded 'commands.js'
|
70
|
+
// file that is imported by e2e and component support files by default. We don't want CT side effects to run when e2e
|
71
|
+
// testing so we early return.
|
72
|
+
// System test to verify CT side effects do not pollute e2e: system-tests/test/e2e_with_mount_import_spec.ts
|
73
|
+
if (Cypress.testingType !== 'component') {
|
74
|
+
return;
|
75
|
+
}
|
76
|
+
// When running component specs, we cannot allow "cy.visit"
|
77
|
+
// because it will wipe out our preparation work, and does not make much sense
|
78
|
+
// thus we overwrite "cy.visit" to throw an error
|
79
|
+
Cypress.Commands.overwrite('visit', () => {
|
80
|
+
throw new Error('cy.visit from a component spec is not allowed');
|
81
|
+
});
|
82
|
+
// @ts-ignore
|
83
|
+
Cypress.on('test:before:run', () => {
|
84
|
+
optionalCallback === null || optionalCallback === void 0 ? void 0 : optionalCallback();
|
85
|
+
cleanupStyles();
|
86
|
+
});
|
87
|
+
}
|
88
|
+
|
89
|
+
/**
|
90
|
+
* @hack fixes "Mocha has already been patched with Zone" error.
|
91
|
+
*/
|
92
|
+
// @ts-ignore
|
93
|
+
window.Mocha['__zone_patch__'] = false;
|
94
|
+
/**
|
95
|
+
* Bootstraps the TestModuleMetaData passed to the TestBed
|
96
|
+
*
|
97
|
+
* @param {Type<T>} component Angular component being mounted
|
98
|
+
* @param {MountConfig} config TestBed configuration passed into the mount function
|
99
|
+
* @returns {MountConfig} MountConfig
|
100
|
+
*/
|
101
|
+
function bootstrapModule(component, config) {
|
102
|
+
const testModuleMetaData = __rest(config, ["componentProperties"]);
|
103
|
+
if (!testModuleMetaData.declarations) {
|
104
|
+
testModuleMetaData.declarations = [];
|
105
|
+
}
|
106
|
+
if (!testModuleMetaData.imports) {
|
107
|
+
testModuleMetaData.imports = [];
|
108
|
+
}
|
109
|
+
// check if the component is a standalone component
|
110
|
+
if (component.ɵcmp.standalone) {
|
111
|
+
testModuleMetaData.imports.push(component);
|
112
|
+
}
|
113
|
+
else {
|
114
|
+
testModuleMetaData.declarations.push(component);
|
115
|
+
}
|
116
|
+
if (!testModuleMetaData.imports.includes(CommonModule)) {
|
117
|
+
testModuleMetaData.imports.push(CommonModule);
|
118
|
+
}
|
119
|
+
return testModuleMetaData;
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* Initializes the TestBed
|
123
|
+
*
|
124
|
+
* @param {Type<T> | string} component Angular component being mounted or its template
|
125
|
+
* @param {MountConfig} config TestBed configuration passed into the mount function
|
126
|
+
* @returns {Type<T>} componentFixture
|
127
|
+
*/
|
128
|
+
function initTestBed(component, config) {
|
129
|
+
const { providers } = config, configRest = __rest(config, ["providers"]);
|
130
|
+
const componentFixture = createComponentFixture(component);
|
131
|
+
getTestBed().configureTestingModule(Object.assign({}, bootstrapModule(componentFixture, configRest)));
|
132
|
+
if (providers != null) {
|
133
|
+
getTestBed().overrideComponent(componentFixture, {
|
134
|
+
add: {
|
135
|
+
providers,
|
136
|
+
},
|
137
|
+
});
|
138
|
+
}
|
139
|
+
return componentFixture;
|
140
|
+
}
|
141
|
+
let WrapperComponent = class WrapperComponent {
|
142
|
+
};
|
143
|
+
WrapperComponent = __decorate([
|
144
|
+
Component({ selector: 'cy-wrapper-component', template: '' })
|
145
|
+
], WrapperComponent);
|
146
|
+
/**
|
147
|
+
* Returns the Component if Type<T> or creates a WrapperComponent
|
148
|
+
*
|
149
|
+
* @param {Type<T> | string} component The component you want to create a fixture of
|
150
|
+
* @returns {Type<T> | WrapperComponent}
|
151
|
+
*/
|
152
|
+
function createComponentFixture(component) {
|
153
|
+
if (typeof component === 'string') {
|
154
|
+
// getTestBed().overrideTemplate is available in v14+
|
155
|
+
// The static TestBed.overrideTemplate is available across versions
|
156
|
+
TestBed.overrideTemplate(WrapperComponent, component);
|
157
|
+
return WrapperComponent;
|
158
|
+
}
|
159
|
+
return component;
|
160
|
+
}
|
161
|
+
/**
|
162
|
+
* Creates the ComponentFixture
|
163
|
+
*
|
164
|
+
* @param {Type<T>} component Angular component being mounted
|
165
|
+
* @param {MountConfig<T>} config MountConfig
|
166
|
+
|
167
|
+
* @returns {ComponentFixture<T>} ComponentFixture
|
168
|
+
*/
|
169
|
+
function setupFixture(component, config) {
|
170
|
+
const fixture = getTestBed().createComponent(component);
|
171
|
+
fixture.whenStable().then(() => {
|
172
|
+
var _a;
|
173
|
+
fixture.autoDetectChanges((_a = config.autoDetectChanges) !== null && _a !== void 0 ? _a : true);
|
174
|
+
});
|
175
|
+
return fixture;
|
176
|
+
}
|
177
|
+
/**
|
178
|
+
* Gets the componentInstance and Object.assigns any componentProperties() passed in the MountConfig
|
179
|
+
*
|
180
|
+
* @param {MountConfig} config TestBed configuration passed into the mount function
|
181
|
+
* @param {ComponentFixture<T>} fixture Fixture for debugging and testing a component.
|
182
|
+
* @returns {T} Component being mounted
|
183
|
+
*/
|
184
|
+
function setupComponent(config, fixture) {
|
185
|
+
let component = fixture.componentInstance;
|
186
|
+
if (config === null || config === void 0 ? void 0 : config.componentProperties) {
|
187
|
+
component = Object.assign(component, config.componentProperties);
|
188
|
+
}
|
189
|
+
if (config.autoSpyOutputs) {
|
190
|
+
Object.keys(component).forEach((key, index, keys) => {
|
191
|
+
const property = component[key];
|
192
|
+
if (property instanceof EventEmitter) {
|
193
|
+
component[key] = createOutputSpy(`${key}Spy`);
|
194
|
+
}
|
195
|
+
});
|
196
|
+
}
|
197
|
+
return component;
|
198
|
+
}
|
199
|
+
/**
|
200
|
+
* Mounts an Angular component inside Cypress browser
|
201
|
+
*
|
202
|
+
* @param {Type<T> | string} component Angular component being mounted or its template
|
203
|
+
* @param {MountConfig<T>} config configuration used to configure the TestBed
|
204
|
+
* @example
|
205
|
+
* import { HelloWorldComponent } from 'hello-world/hello-world.component'
|
206
|
+
* import { MyService } from 'services/my.service'
|
207
|
+
* import { SharedModule } from 'shared/shared.module';
|
208
|
+
* import { mount } from '@cypress/angular'
|
209
|
+
* it('can mount', () => {
|
210
|
+
* mount(HelloWorldComponent, {
|
211
|
+
* providers: [MyService],
|
212
|
+
* imports: [SharedModule]
|
213
|
+
* })
|
214
|
+
* cy.get('h1').contains('Hello World')
|
215
|
+
* })
|
216
|
+
*
|
217
|
+
* or
|
218
|
+
*
|
219
|
+
* it('can mount with template', () => {
|
220
|
+
* mount('<app-hello-world></app-hello-world>', {
|
221
|
+
* declarations: [HelloWorldComponent],
|
222
|
+
* providers: [MyService],
|
223
|
+
* imports: [SharedModule]
|
224
|
+
* })
|
225
|
+
* })
|
226
|
+
* @returns Cypress.Chainable<MountResponse<T>>
|
227
|
+
*/
|
228
|
+
function mount(component, config = {}) {
|
229
|
+
const componentFixture = initTestBed(component, config);
|
230
|
+
const fixture = setupFixture(componentFixture, config);
|
231
|
+
const componentInstance = setupComponent(config, fixture);
|
232
|
+
const mountResponse = {
|
233
|
+
fixture,
|
234
|
+
component: componentInstance,
|
235
|
+
};
|
236
|
+
const logMessage = typeof component === 'string' ? 'Component' : componentFixture.name;
|
237
|
+
Cypress.log({
|
238
|
+
name: 'mount',
|
239
|
+
message: logMessage,
|
240
|
+
consoleProps: () => ({ result: mountResponse }),
|
241
|
+
});
|
242
|
+
return cy.wrap(mountResponse, { log: false });
|
243
|
+
}
|
244
|
+
/**
|
245
|
+
* Creates a new Event Emitter and then spies on it's `emit` method
|
246
|
+
*
|
247
|
+
* @param {string} alias name you want to use for your cy.spy() alias
|
248
|
+
* @returns EventEmitter<T>
|
249
|
+
*/
|
250
|
+
const createOutputSpy = (alias) => {
|
251
|
+
const emitter = new EventEmitter();
|
252
|
+
cy.spy(emitter, 'emit').as(alias);
|
253
|
+
return emitter;
|
254
|
+
};
|
255
|
+
// Only needs to run once, we reset before each test
|
256
|
+
getTestBed().initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
|
257
|
+
teardown: { destroyAfterEach: false },
|
258
|
+
});
|
259
|
+
setupHooks(() => {
|
260
|
+
// Not public, we need to call this to remove the last component from the DOM
|
261
|
+
getTestBed()['tearDownTestingModule']();
|
262
|
+
getTestBed().resetTestingModule();
|
263
|
+
});
|
264
|
+
|
265
|
+
export { createOutputSpy, mount };
|
@@ -0,0 +1,112 @@
|
|
1
|
+
/// <reference types="cypress" />
|
2
|
+
/// <reference types="cypress" />
|
3
|
+
import 'zone.js';
|
4
|
+
import 'zone.js/testing';
|
5
|
+
import { Type } from '@angular/core';
|
6
|
+
import { ComponentFixture, TestModuleMetadata } from '@angular/core/testing';
|
7
|
+
/**
|
8
|
+
* Additional module configurations needed while mounting the component, like
|
9
|
+
* providers, declarations, imports and even component @Inputs()
|
10
|
+
*
|
11
|
+
*
|
12
|
+
* @interface MountConfig
|
13
|
+
* @see https://angular.io/api/core/testing/TestModuleMetadata
|
14
|
+
*/
|
15
|
+
export interface MountConfig<T> extends TestModuleMetadata {
|
16
|
+
/**
|
17
|
+
* @memberof MountConfig
|
18
|
+
* @description flag to automatically create a cy.spy() for every component @Output() property
|
19
|
+
* @example
|
20
|
+
* export class ButtonComponent {
|
21
|
+
* @Output clicked = new EventEmitter()
|
22
|
+
* }
|
23
|
+
*
|
24
|
+
* cy.mount(ButtonComponent, { autoSpyOutputs: true })
|
25
|
+
* cy.get('@clickedSpy).should('have.been.called')
|
26
|
+
*/
|
27
|
+
autoSpyOutputs?: boolean;
|
28
|
+
/**
|
29
|
+
* @memberof MountConfig
|
30
|
+
* @description flag defaulted to true to automatically detect changes in your components
|
31
|
+
*/
|
32
|
+
autoDetectChanges?: boolean;
|
33
|
+
/**
|
34
|
+
* @memberof MountConfig
|
35
|
+
* @example
|
36
|
+
* import { ButtonComponent } from 'button/button.component'
|
37
|
+
* it('renders a button with Save text', () => {
|
38
|
+
* cy.mount(ButtonComponent, { componentProperties: { text: 'Save' }})
|
39
|
+
* cy.get('button').contains('Save')
|
40
|
+
* })
|
41
|
+
*
|
42
|
+
* it('renders a button with a cy.spy() replacing EventEmitter', () => {
|
43
|
+
* cy.mount(ButtonComponent, {
|
44
|
+
* componentProperties: {
|
45
|
+
* clicked: cy.spy().as('mySpy)
|
46
|
+
* }
|
47
|
+
* })
|
48
|
+
* cy.get('button').click()
|
49
|
+
* cy.get('@mySpy').should('have.been.called')
|
50
|
+
* })
|
51
|
+
*/
|
52
|
+
componentProperties?: Partial<{
|
53
|
+
[P in keyof T]: T[P];
|
54
|
+
}>;
|
55
|
+
}
|
56
|
+
/**
|
57
|
+
* Type that the `mount` function returns
|
58
|
+
* @type MountResponse<T>
|
59
|
+
*/
|
60
|
+
export declare type MountResponse<T> = {
|
61
|
+
/**
|
62
|
+
* Fixture for debugging and testing a component.
|
63
|
+
*
|
64
|
+
* @memberof MountResponse
|
65
|
+
* @see https://angular.io/api/core/testing/ComponentFixture
|
66
|
+
*/
|
67
|
+
fixture: ComponentFixture<T>;
|
68
|
+
/**
|
69
|
+
* The instance of the root component class
|
70
|
+
*
|
71
|
+
* @memberof MountResponse
|
72
|
+
* @see https://angular.io/api/core/testing/ComponentFixture#componentInstance
|
73
|
+
*/
|
74
|
+
component: T;
|
75
|
+
};
|
76
|
+
/**
|
77
|
+
* Mounts an Angular component inside Cypress browser
|
78
|
+
*
|
79
|
+
* @param {Type<T> | string} component Angular component being mounted or its template
|
80
|
+
* @param {MountConfig<T>} config configuration used to configure the TestBed
|
81
|
+
* @example
|
82
|
+
* import { HelloWorldComponent } from 'hello-world/hello-world.component'
|
83
|
+
* import { MyService } from 'services/my.service'
|
84
|
+
* import { SharedModule } from 'shared/shared.module';
|
85
|
+
* import { mount } from '@cypress/angular'
|
86
|
+
* it('can mount', () => {
|
87
|
+
* mount(HelloWorldComponent, {
|
88
|
+
* providers: [MyService],
|
89
|
+
* imports: [SharedModule]
|
90
|
+
* })
|
91
|
+
* cy.get('h1').contains('Hello World')
|
92
|
+
* })
|
93
|
+
*
|
94
|
+
* or
|
95
|
+
*
|
96
|
+
* it('can mount with template', () => {
|
97
|
+
* mount('<app-hello-world></app-hello-world>', {
|
98
|
+
* declarations: [HelloWorldComponent],
|
99
|
+
* providers: [MyService],
|
100
|
+
* imports: [SharedModule]
|
101
|
+
* })
|
102
|
+
* })
|
103
|
+
* @returns Cypress.Chainable<MountResponse<T>>
|
104
|
+
*/
|
105
|
+
export declare function mount<T>(component: Type<T> | string, config?: MountConfig<T>): Cypress.Chainable<MountResponse<T>>;
|
106
|
+
/**
|
107
|
+
* Creates a new Event Emitter and then spies on it's `emit` method
|
108
|
+
*
|
109
|
+
* @param {string} alias name you want to use for your cy.spy() alias
|
110
|
+
* @returns EventEmitter<T>
|
111
|
+
*/
|
112
|
+
export declare const createOutputSpy: <T>(alias: string) => any;
|
@@ -0,0 +1,68 @@
|
|
1
|
+
{
|
2
|
+
"name": "@cypress/angular",
|
3
|
+
"version": "0.0.0-development",
|
4
|
+
"description": "Test Angular Components using Cypress",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"scripts": {
|
7
|
+
"prebuild": "rimraf dist",
|
8
|
+
"build": "rollup -c rollup.config.mjs",
|
9
|
+
"postbuild": "node ../../scripts/sync-exported-npm-with-cli.js",
|
10
|
+
"build-prod": "yarn build",
|
11
|
+
"check-ts": "tsc --noEmit"
|
12
|
+
},
|
13
|
+
"dependencies": {},
|
14
|
+
"devDependencies": {
|
15
|
+
"@angular/common": "^14.2.0",
|
16
|
+
"@angular/core": "^14.2.0",
|
17
|
+
"@angular/platform-browser-dynamic": "^14.2.0",
|
18
|
+
"@cypress/mount-utils": "0.0.0-development",
|
19
|
+
"typescript": "^4.7.4",
|
20
|
+
"zone.js": "~0.11.4"
|
21
|
+
},
|
22
|
+
"peerDependencies": {
|
23
|
+
"@angular/common": ">=13",
|
24
|
+
"@angular/core": ">=13",
|
25
|
+
"@angular/platform-browser-dynamic": ">=13",
|
26
|
+
"zone.js": ">=0.11.0"
|
27
|
+
},
|
28
|
+
"files": [
|
29
|
+
"dist"
|
30
|
+
],
|
31
|
+
"types": "dist/index.d.ts",
|
32
|
+
"license": "MIT",
|
33
|
+
"repository": {
|
34
|
+
"type": "git",
|
35
|
+
"url": "https://github.com/cypress-io/cypress.git"
|
36
|
+
},
|
37
|
+
"homepage": "https://github.com/cypress-io/cypress/blob/master/npm/angular/#readme",
|
38
|
+
"author": "Jordan Powell",
|
39
|
+
"bugs": "https://github.com/cypress-io/cypress/issues/new?assignees=&labels=npm%3A%20%40cypress%2Fangular&template=1-bug-report.md&title=",
|
40
|
+
"keywords": [
|
41
|
+
"angular",
|
42
|
+
"cypress",
|
43
|
+
"cypress-io",
|
44
|
+
"test",
|
45
|
+
"testing"
|
46
|
+
],
|
47
|
+
"contributors": [
|
48
|
+
{
|
49
|
+
"name": "Jordan Powell",
|
50
|
+
"social": "@jordanpowell88"
|
51
|
+
},
|
52
|
+
{
|
53
|
+
"name": "Zach Williams",
|
54
|
+
"social": "@ZachJW34"
|
55
|
+
}
|
56
|
+
],
|
57
|
+
"module": "dist/index.js",
|
58
|
+
"publishConfig": {
|
59
|
+
"access": "public"
|
60
|
+
},
|
61
|
+
"standard": {
|
62
|
+
"globals": [
|
63
|
+
"Cypress",
|
64
|
+
"cy",
|
65
|
+
"expect"
|
66
|
+
]
|
67
|
+
}
|
68
|
+
}
|
package/lib/tasks/download.js
CHANGED
@@ -74,11 +74,11 @@ const getCA = () => {
|
|
74
74
|
});
|
75
75
|
};
|
76
76
|
|
77
|
-
const prepend = (arch, urlPath) => {
|
77
|
+
const prepend = (arch, urlPath, version) => {
|
78
78
|
const endpoint = url.resolve(getBaseUrl(), urlPath);
|
79
79
|
const platform = os.platform();
|
80
80
|
const pathTemplate = util.getEnv('CYPRESS_DOWNLOAD_PATH_TEMPLATE', true);
|
81
|
-
return pathTemplate ? pathTemplate.replace(/\\?\$\{endpoint\}/, endpoint).replace(/\\?\$\{platform\}/, platform).replace(/\\?\$\{arch\}/, arch) : `${endpoint}?platform=${platform}&arch=${arch}`;
|
81
|
+
return pathTemplate ? pathTemplate.replace(/\\?\$\{endpoint\}/, endpoint).replace(/\\?\$\{platform\}/, platform).replace(/\\?\$\{arch\}/, arch).replace(/\\?\$\{version\}/, version) : `${endpoint}?platform=${platform}&arch=${arch}`;
|
82
82
|
};
|
83
83
|
|
84
84
|
const getUrl = (arch, version) => {
|
@@ -87,7 +87,8 @@ const getUrl = (arch, version) => {
|
|
87
87
|
return version;
|
88
88
|
}
|
89
89
|
|
90
|
-
|
90
|
+
const urlPath = version ? `desktop/${version}` : 'desktop';
|
91
|
+
return prepend(arch, urlPath, version);
|
91
92
|
};
|
92
93
|
|
93
94
|
const statusMessage = err => {
|
package/mount-utils/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# [@cypress/mount-utils-v2.0.1](https://github.com/cypress-io/cypress/compare/@cypress/mount-utils-v2.0.0...@cypress/mount-utils-v2.0.1) (2022-08-11)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* remove CT side effects from mount when e2e testing ([#22633](https://github.com/cypress-io/cypress/issues/22633)) ([a9476ec](https://github.com/cypress-io/cypress/commit/a9476ecb3d43f628b689e060294a1952937cb1a7))
|
7
|
+
|
1
8
|
# [@cypress/mount-utils-v2.0.0](https://github.com/cypress-io/cypress/compare/@cypress/mount-utils-v1.0.2...@cypress/mount-utils-v2.0.0) (2022-06-13)
|
2
9
|
|
3
10
|
|