From b3e315301c82cfdc24a5b988b78f2b38eaedf3dd Mon Sep 17 00:00:00 2001 From: Ely Lucas Date: Wed, 24 Nov 2021 17:07:21 -0700 Subject: [PATCH 01/13] adding cy.mount guide --- .../cy-mount-must-be-implemented.png | Bin 0 -> 13053 bytes .../creating-a-cy-mount-command.md | 141 +++++++++++++++++- 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 assets/img/guides/component-testing/cy-mount-must-be-implemented.png diff --git a/assets/img/guides/component-testing/cy-mount-must-be-implemented.png b/assets/img/guides/component-testing/cy-mount-must-be-implemented.png new file mode 100644 index 0000000000000000000000000000000000000000..ae885f0a8850a3cfe30fccba2bd30352e7003c9b GIT binary patch literal 13053 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 literal 0 HcmV?d00001 diff --git a/content/guides/getting-started/creating-a-cy-mount-command.md b/content/guides/getting-started/creating-a-cy-mount-command.md index 6d12da3610..009416f67a 100644 --- a/content/guides/getting-started/creating-a-cy-mount-command.md +++ b/content/guides/getting-started/creating-a-cy-mount-command.md @@ -2,4 +2,143 @@ title: Creating a cy.mount Command --- -CONTENT TBD +We recommend creating a custom `cy.mount` command which wraps the mount command +from the framework-specific libraries in your component tests. Doing so offers a +few advantages: + +- You don't need to import the mount command into every test as the `cy.mount` + command is available globally +- You can set up common scenarios that you usually have to do in each test, like + wrapping a React component in a provider or adding Vue plugins + +Cypress does not provide a `cy.mount` command out-of-the-box. If you attempt to +use `cy.mount` before creating it, you will get a warning letting you know: + +cy.mount must be implemented by the user. + +Let's take a look at how to implement one. + +## Creating a New `cy.mount` Command + +To use `cy.mount` you will need to add a custom command to the commands file. +Below are examples that you can start with for your commands: + +:::react-vue-example + +```js +import { mount } from '@cypress/react' +Cypress.Commands.add('mount', (jsx, options) => { + // Wrap any parent components needed + // ie: return mount({jsx}, options) + return mount(jsx, options) +}) +``` + +```js +import { mount } from '@cypress/vue' +Cypress.Commands.add('mount', (comp, options = {}) => { + // Setup options object + options.global = options.global || {} + options.global.stubs = options.global.stubs || {} + options.global.stubs['transition'] = false + options.global.components = options.global.components || {} + options.global.plugins = options.global.plugins || [] + + /* Add any global plugins */ + // options.global.plugins.push({ + // install(app) { + // app.use(MyPlugin); + // }, + // }); + + /* Add any global components */ + // options.global.components['Button'] = Button; + + return mount(comp, options) +}) +``` + +::: + +For more info on adding custom commands like `cy.mount`, see our +[Custom Commands API](/api/cypress-api/custom-commands) guide. + +## Adding TypeScript Typings for `cy.mount` Commands + +When working in TypeScript, you will need to add some custom typings for your +commands to get code completion and avoid any TypeScript errors. Below are the +typings for the above examples for React and Vue: + +:::react-vue-example + +```ts +// cypress.d.ts +import { MountOptions, MountReturn } from '@cypress/react' +declare global { + namespace Cypress { + interface Chainable { + /** + * Mounts a React node + * @param jsx React Node to mount + * @param options Additional options to pass into mount + */ + mount( + jsx: React.ReactNode, + options?: MountOptions + ): Cypress.Chainable + } + } +} +``` + +```ts +import { mount } from '@cypress/vue' +type MountParams = Parameters + +declare global { + namespace Cypress { + type ComponentParam = MountParams[0] | JSX.Element + type OptionsParam = MountParams[1] + interface Chainable { + /** + * Helper mount function for Vue Components + * @param component Vue Component or JSX Element to mount + * @param options Options passed to Vue Test Utils + */ + mount(component: ComponentParam, options?: OptionsParam): Chainable + } + } +} +``` + +::: + +The typings will need to be in a location that any code can access in the +application. We recommend adding them to a `cypress.d.ts` file at the root of +the application and updating any tsconfig.json files to reference the typings +file in the `include` option: + +``` +"include": ["./src", "cypress.d.ts"] +``` + +## Other Mount Commands + +You can create as many custom mount commands as you need. For instance, below is +a command that wraps a React component that requires React Router with +``: + +``` +Cypress.Commands.add( + 'mountWithRouter', + (jsx, options) => mount({jsx}, options) +); +``` + +## When Not to Use a Custom Mount Command + +Just like commands in general, not every scenario requires adding a custom mount +command. For instance, if you have a command for a particular test and it +doesn't get reused elsewhere, it makes more sense to put that logic in a local +function to the test. See the best practices section in the +[Commands API](api/cypress-api/custom-commands#Best-Practices) for more info. From bc8a5edcf8e1cedd292f678d68da86f9d16e7315 Mon Sep 17 00:00:00 2001 From: Ely Lucas Date: Mon, 29 Nov 2021 15:03:10 -0700 Subject: [PATCH 02/13] updating headers to show component only badge --- components/MainContentHeader.vue | 5 +++++ pages/api/_.vue | 1 + pages/guides/_.vue | 1 + 3 files changed, 7 insertions(+) diff --git a/components/MainContentHeader.vue b/components/MainContentHeader.vue index 3e63d142b7..0ba5ac4167 100644 --- a/components/MainContentHeader.vue +++ b/components/MainContentHeader.vue @@ -8,6 +8,10 @@ export default { e2eSpecific: { type: Boolean, required: false, + }, + componentSpecific: { + type: Boolean, + required: false, } } } @@ -19,5 +23,6 @@ export default { {{ title }} + diff --git a/pages/api/_.vue b/pages/api/_.vue index 4dffb96dd6..f1292d71fd 100644 --- a/pages/api/_.vue +++ b/pages/api/_.vue @@ -111,6 +111,7 @@ export default { diff --git a/pages/guides/_.vue b/pages/guides/_.vue index 79aa4eb482..51d1659c0b 100644 --- a/pages/guides/_.vue +++ b/pages/guides/_.vue @@ -92,6 +92,7 @@ export default {