From 64da9beb9533e29a148b81116c40a077e3039454 Mon Sep 17 00:00:00 2001 From: Grant Petersen-Speelman Date: Mon, 6 Jun 2022 08:28:55 +1000 Subject: [PATCH 01/10] Cypress 10 changes --- .../cypress_on_rails/install_generator.rb | 9 +- .../templates/spec/cypress.config.js | 9 + .../rails_examples/advance_factory_bot.cy.js} | 0 .../rails_examples/other.cy.js} | 0 .../rails_examples/using_factory_bot.cy.js} | 0 .../rails_examples/using_fixtures.cy.js} | 0 .../rails_examples/using_scenarios.cy.js} | 0 .../rails_examples/using_vcr.cy.js} | 0 .../spec/cypress/fixtures/example.json | 5 - .../integration/examples/actions.spec.js | 272 ------------------ .../integration/examples/aliasing.spec.js | 42 --- .../integration/examples/assertions.spec.js | 63 ---- .../integration/examples/connectors.spec.js | 55 ---- .../integration/examples/cookies.spec.js | 78 ----- .../integration/examples/cypress_api.spec.js | 211 -------------- .../integration/examples/files.spec.js | 86 ------ .../examples/local_storage.spec.js | 52 ---- .../integration/examples/location.spec.js | 32 --- .../cypress/integration/examples/misc.spec.js | 68 ----- .../integration/examples/navigation.spec.js | 54 ---- .../examples/network_requests.spec.js | 108 ------- .../integration/examples/querying.spec.js | 65 ----- .../examples/spies_stubs_clocks.spec.js | 62 ---- .../integration/examples/traversal.spec.js | 121 -------- .../integration/examples/utilities.spec.js | 89 ------ .../integration/examples/viewport.spec.js | 59 ---- .../integration/examples/waiting.spec.js | 34 --- .../integration/examples/window.spec.js | 22 -- specs_e2e/rails_5_2/test.sh | 2 +- 29 files changed, 12 insertions(+), 1586 deletions(-) create mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress.config.js rename lib/generators/cypress_on_rails/templates/spec/cypress/{integration/rails_examples/advance_factory_bot_spec.js => e2e/rails_examples/advance_factory_bot.cy.js} (100%) rename lib/generators/cypress_on_rails/templates/spec/cypress/{integration/rails_examples/other_spec.js => e2e/rails_examples/other.cy.js} (100%) rename lib/generators/cypress_on_rails/templates/spec/cypress/{integration/rails_examples/using_factory_bot_spec.js => e2e/rails_examples/using_factory_bot.cy.js} (100%) rename lib/generators/cypress_on_rails/templates/spec/cypress/{integration/rails_examples/using_fixtures_spec.js => e2e/rails_examples/using_fixtures.cy.js} (100%) rename lib/generators/cypress_on_rails/templates/spec/cypress/{integration/rails_examples/using_scenarios_spec.js => e2e/rails_examples/using_scenarios.cy.js} (100%) rename lib/generators/cypress_on_rails/templates/spec/cypress/{integration/rails_examples/using_vcr_spec.js => e2e/rails_examples/using_vcr.cy.js} (100%) delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/fixtures/example.json delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/actions.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/aliasing.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/assertions.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/connectors.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/cookies.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/cypress_api.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/files.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/local_storage.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/location.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/misc.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/navigation.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/network_requests.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/querying.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/spies_stubs_clocks.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/traversal.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/utilities.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/viewport.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/waiting.spec.js delete mode 100644 lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/window.spec.js diff --git a/lib/generators/cypress_on_rails/install_generator.rb b/lib/generators/cypress_on_rails/install_generator.rb index 4d930a9..43c9138 100644 --- a/lib/generators/cypress_on_rails/install_generator.rb +++ b/lib/generators/cypress_on_rails/install_generator.rb @@ -3,7 +3,6 @@ class InstallGenerator < Rails::Generators::Base class_option :cypress_folder, type: :string, default: 'cypress' class_option :install_cypress, type: :boolean, default: true class_option :install_cypress_with, type: :string, default: 'yarn' - class_option :install_cypress_examples, type: :boolean, default: false class_option :experimental, type: :boolean, default: false source_root File.expand_path('../templates', __FILE__) @@ -23,13 +22,9 @@ def install_cypress fail 'failed to install cypress' unless system(command) end end - if options.install_cypress_examples - directory 'spec/cypress/integration/examples', "#{options.cypress_folder}/integration/examples" - directory 'spec/cypress/fixtures', "#{options.cypress_folder}/fixtures" - end template "spec/cypress/support/index.js.erb", "#{options.cypress_folder}/support/index.js" copy_file "spec/cypress/support/commands.js", "#{options.cypress_folder}/support/commands.js" - copy_file "spec/cypress.json", "#{options.cypress_folder}/../cypress.json" + copy_file "spec/cypress.config.js", "#{options.cypress_folder}/../cypress.config.js" end def add_initial_files @@ -37,7 +32,7 @@ def add_initial_files template "spec/cypress/cypress_helper.rb.erb", "#{options.cypress_folder}/cypress_helper.rb" copy_file "spec/cypress/support/on-rails.js", "#{options.cypress_folder}/support/on-rails.js" directory 'spec/cypress/app_commands', "#{options.cypress_folder}/app_commands" - directory 'spec/cypress/integration/rails_examples', "#{options.cypress_folder}/integration/rails_examples" + directory 'spec/cypress/e2e/rails_examples', "#{options.cypress_folder}/e2e/rails_examples" end def update_files diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress.config.js b/lib/generators/cypress_on_rails/templates/spec/cypress.config.js new file mode 100644 index 0000000..205b599 --- /dev/null +++ b/lib/generators/cypress_on_rails/templates/spec/cypress.config.js @@ -0,0 +1,9 @@ +const { defineConfig } = require('cypress') + +module.exports = defineConfig({ + e2e: { + baseUrl: "http://localhost:5017", + defaultCommandTimeout: 10000, + supportFile: "cypress/support/index.ts", + } +}) diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/advance_factory_bot_spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/advance_factory_bot.cy.js similarity index 100% rename from lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/advance_factory_bot_spec.js rename to lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/advance_factory_bot.cy.js diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/other_spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/other.cy.js similarity index 100% rename from lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/other_spec.js rename to lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/other.cy.js diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_factory_bot_spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_factory_bot.cy.js similarity index 100% rename from lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_factory_bot_spec.js rename to lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_factory_bot.cy.js diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_fixtures_spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_fixtures.cy.js similarity index 100% rename from lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_fixtures_spec.js rename to lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_fixtures.cy.js diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_scenarios_spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_scenarios.cy.js similarity index 100% rename from lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_scenarios_spec.js rename to lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_scenarios.cy.js diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_vcr_spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_vcr.cy.js similarity index 100% rename from lib/generators/cypress_on_rails/templates/spec/cypress/integration/rails_examples/using_vcr_spec.js rename to lib/generators/cypress_on_rails/templates/spec/cypress/e2e/rails_examples/using_vcr.cy.js diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/fixtures/example.json b/lib/generators/cypress_on_rails/templates/spec/cypress/fixtures/example.json deleted file mode 100644 index da18d93..0000000 --- a/lib/generators/cypress_on_rails/templates/spec/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} \ No newline at end of file diff --git a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/actions.spec.js b/lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/actions.spec.js deleted file mode 100644 index 0375aba..0000000 --- a/lib/generators/cypress_on_rails/templates/spec/cypress/integration/examples/actions.spec.js +++ /dev/null @@ -1,272 +0,0 @@ -/// - -context('Actions', () => { - beforeEach(() => { - cy.visit('https://example.cypress.io/commands/actions') - }) - - // https://on.cypress.io/interacting-with-elements - - it('.type() - type into a DOM element', () => { - // https://on.cypress.io/type - cy.get('.action-email') - .type('fake@email.com').should('have.value', 'fake@email.com') - - // .type() with special character sequences - .type('{leftarrow}{rightarrow}{uparrow}{downarrow}') - .type('{del}{selectall}{backspace}') - - // .type() with key modifiers - .type('{alt}{option}') //these are equivalent - .type('{ctrl}{control}') //these are equivalent - .type('{meta}{command}{cmd}') //these are equivalent - .type('{shift}') - - // Delay each keypress by 0.1 sec - .type('slow.typing@email.com', { delay: 100 }) - .should('have.value', 'slow.typing@email.com') - - cy.get('.action-disabled') - // Ignore error checking prior to type - // like whether the input is visible or disabled - .type('disabled error checking', { force: true }) - .should('have.value', 'disabled error checking') - }) - - it('.focus() - focus on a DOM element', () => { - // https://on.cypress.io/focus - cy.get('.action-focus').focus() - .should('have.class', 'focus') - .prev().should('have.attr', 'style', 'color: orange;') - }) - - it('.blur() - blur off a DOM element', () => { - // https://on.cypress.io/blur - cy.get('.action-blur').type('About to blur').blur() - .should('have.class', 'error') - .prev().should('have.attr', 'style', 'color: red;') - }) - - it('.clear() - clears an input or textarea element', () => { - // https://on.cypress.io/clear - cy.get('.action-clear').type('Clear this text') - .should('have.value', 'Clear this text') - .clear() - .should('have.value', '') - }) - - it('.submit() - submit a form', () => { - // https://on.cypress.io/submit - cy.get('.action-form') - .find('[type="text"]').type('HALFOFF') - cy.get('.action-form').submit() - .next().should('contain', 'Your form has been submitted!') - }) - - it('.click() - click on a DOM element', () => { - // https://on.cypress.io/click - cy.get('.action-btn').click() - - // You can click on 9 specific positions of an element: - // ----------------------------------- - // | topLeft top topRight | - // | | - // | | - // | | - // | left center right | - // | | - // | | - // | | - // | bottomLeft bottom bottomRight | - // ----------------------------------- - - // clicking in the center of the element is the default - cy.get('#action-canvas').click() - - cy.get('#action-canvas').click('topLeft') - cy.get('#action-canvas').click('top') - cy.get('#action-canvas').click('topRight') - cy.get('#action-canvas').click('left') - cy.get('#action-canvas').click('right') - cy.get('#action-canvas').click('bottomLeft') - cy.get('#action-canvas').click('bottom') - cy.get('#action-canvas').click('bottomRight') - - // .click() accepts an x and y coordinate - // that controls where the click occurs :) - - cy.get('#action-canvas') - .click(80, 75) // click 80px on x coord and 75px on y coord - .click(170, 75) - .click(80, 165) - .click(100, 185) - .click(125, 190) - .click(150, 185) - .click(170, 165) - - // click multiple elements by passing multiple: true - cy.get('.action-labels>.label').click({ multiple: true }) - - // Ignore error checking prior to clicking - cy.get('.action-opacity>.btn').click({ force: true }) - }) - - it('.dblclick() - double click on a DOM element', () => { - // https://on.cypress.io/dblclick - - // Our app has a listener on 'dblclick' event in our 'scripts.js' - // that hides the div and shows an input on double click - cy.get('.action-div').dblclick().should('not.be.visible') - cy.get('.action-input-hidden').should('be.visible') - }) - - it('.check() - check a checkbox or radio element', () => { - // https://on.cypress.io/check - - // By default, .check() will check all - // matching checkbox or radio elements in succession, one after another - cy.get('.action-checkboxes [type="checkbox"]').not('[disabled]') - .check().should('be.checked') - - cy.get('.action-radios [type="radio"]').not('[disabled]') - .check().should('be.checked') - - // .check() accepts a value argument - cy.get('.action-radios [type="radio"]') - .check('radio1').should('be.checked') - - // .check() accepts an array of values - cy.get('.action-multiple-checkboxes [type="checkbox"]') - .check(['checkbox1', 'checkbox2']).should('be.checked') - - // Ignore error checking prior to checking - cy.get('.action-checkboxes [disabled]') - .check({ force: true }).should('be.checked') - - cy.get('.action-radios [type="radio"]') - .check('radio3', { force: true }).should('be.checked') - }) - - it('.uncheck() - uncheck a checkbox element', () => { - // https://on.cypress.io/uncheck - - // By default, .uncheck() will uncheck all matching - // checkbox elements in succession, one after another - cy.get('.action-check [type="checkbox"]') - .not('[disabled]') - .uncheck().should('not.be.checked') - - // .uncheck() accepts a value argument - cy.get('.action-check [type="checkbox"]') - .check('checkbox1') - .uncheck('checkbox1').should('not.be.checked') - - // .uncheck() accepts an array of values - cy.get('.action-check [type="checkbox"]') - .check(['checkbox1', 'checkbox3']) - .uncheck(['checkbox1', 'checkbox3']).should('not.be.checked') - - // Ignore error checking prior to unchecking - cy.get('.action-check [disabled]') - .uncheck({ force: true }).should('not.be.checked') - }) - - it('.select() - select an option in a