From 1ac55913a43e58d734ae91c8ad2cf928c30b9d16 Mon Sep 17 00:00:00 2001 From: Dan Adajian Date: Wed, 10 Aug 2022 14:36:58 -0500 Subject: [PATCH] feat: add jsx support (#50) * feat: add support for tsx files * remove video --- .gitignore | 1 + cypress.config.ts | 3 +++ cypress/commands/custom-mount.tsx | 17 +++++++++++++ cypress/component/component-example.cy.tsx | 25 +++++++++++++++++++ ...enerate-types-from-abstract-syntax-tree.ts | 2 +- 5 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 cypress/commands/custom-mount.tsx diff --git a/.gitignore b/.gitignore index 59468ba..ad63f25 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ node_modules .idea .DS_Store cypress/screenshots +cypress/videos diff --git a/cypress.config.ts b/cypress.config.ts index 3dee69d..0f842c2 100644 --- a/cypress.config.ts +++ b/cypress.config.ts @@ -2,6 +2,9 @@ import { cypressCodegen } from 'cypress-codegen/dist/plugin'; import { defineConfig } from 'cypress'; export default defineConfig({ + screenshotOnRunFailure: false, + video: false, + e2e: { setupNodeEvents(on, config) { cypressCodegen(on, config); diff --git a/cypress/commands/custom-mount.tsx b/cypress/commands/custom-mount.tsx new file mode 100644 index 0000000..36caf44 --- /dev/null +++ b/cypress/commands/custom-mount.tsx @@ -0,0 +1,17 @@ +import * as React from 'react'; + +export const customMount = (Component: React.ReactElement) => { + cy.mount( +
+ +
+ ); +}; + +declare global { + namespace Cypress { + interface Chainable { + customMount(Component: React.ReactElement): Chainable; + } + } +} diff --git a/cypress/component/component-example.cy.tsx b/cypress/component/component-example.cy.tsx index dc449e1..65805f2 100644 --- a/cypress/component/component-example.cy.tsx +++ b/cypress/component/component-example.cy.tsx @@ -23,4 +23,29 @@ describe('Example Test', () => { it('should import custom commands in component tests', () => { cy.functionExample(componentText); }); + + it('should dynamically import custom commands from arrow functions', () => { + cy.arrowFunctionExample(componentText); + }); + + it('should support scoped methods', () => { + cy.contains(componentText).functionExampleScoped(componentText); + }); + + it('should dynamically import nested custom commands', () => { + cy.nestedExample(componentText); + }); + + it('should chain custom commands', () => { + cy.log(componentText) + .functionExample(componentText) + .arrowFunctionExample(componentText) + .nestedExample(componentText); + }); + + it('should support custom mount commands', () => { + const myComponent = () => <>{'Different text'}; + cy.customMount(myComponent); + cy.contains('Different text'); + }); }); diff --git a/src/generate-types-from-abstract-syntax-tree.ts b/src/generate-types-from-abstract-syntax-tree.ts index 569f88e..34397fb 100644 --- a/src/generate-types-from-abstract-syntax-tree.ts +++ b/src/generate-types-from-abstract-syntax-tree.ts @@ -30,7 +30,7 @@ import { isScopedMethod } from './common'; export const generateTypesFromAbstractSyntaxTree = (filePath: string, prettierConfig?: Options) => { const contents = readFileSync(resolve(filePath)).toString(); - const ast = parse(contents, { sourceType: 'module', plugins: ['typescript'] }); + const ast = parse(contents, { sourceType: 'module', plugins: ['typescript', 'jsx'] }); const currentNodes = ast.program.body; const customCommands = currentNodes .filter(