Configuración de Cucumber y Cypress para pruebas BDD
Clase 20 de 29 • Curso de Cypress Avanzado
Contenido del curso
Clase 20 de 29 • Curso de Cypress Avanzado
Contenido del curso
Carlos Rubio Gallego
Erick Vicentin
Juan Pablo Jaramillo
Anderson David Chicaiza Tenesaca
Alberto Alejandro Foinquinos Benitez
Alberto Alejandro Foinquinos Benitez
Mario Alexander Vargas Celis
Amir alexander romaña Córdoba
Amir alexander romaña Córdoba
Jose Elver Arturo Tirado
Carlos Rubio Gallego
La config de webpack.
webpack({ webpackOptions: { resolve: { extensions: [".ts", ".js"], }, module: { rules: [ { test: /\.feature$/, use: [ { loader: "@badeball/cypress-cucumber-preprocessor/webpack", options: config, }, ], }, ], }, }, }) );
Tampoco hace falta usar expresiones regulares en Cucumber si o si, porque se puede tranquilamente de la siguiente forma (noten que dentro de los {} hay que especificar el tipo de dato que estamos recibiendo):
login.feature
Feature: Login test Scenario: I login with correct credentials Given I am on the login page When I fill on my login and password with "username" and "password" Then I should validate that Im logged in
login.js
const { Given, When, Then, } = require('@badeball/cypress-cucumber-preprocessor'); const { default: LoginWebPage } = require('../../../pages/LoginPage'); let loginPage; Given('I am on the login page', () => { loginPage = new LoginWebPage(); loginPage.visit(); loginPage.isLoadPage(); }); When( 'I fill on my login and password with {string} and {string}', (username, password) => { loginPage = new LoginWebPage(); loginPage.doLogin(username, password); } ); Then('I should validate that Im logged in', () => { loginPage = new LoginWebPage(); loginPage.validateSuccessfulLogin(); });
Para que funcione el webpack se debe instalar la dependencia npm install webpack --legacy-peer-deps usar el --legacy-peer-deps porque hay problemas con la versión de cypress-image-snapshot@4.0.1
gracias también me funciono asi
npm i @badeball/cypress-cucumber-preprocessor @cypress/webpack-preprocessor --legacy-peer-deps
https://marketplace.visualstudio.com/items?itemName=alexkrechik.cucumberautocomplete
Con esta extension vscode tendra el soporte que necesita para usar cucumber (gherkin)
cypress.config.js
const { defineConfig } = require("cypress"); const { addMatchImageSnapshotPlugin, } = require("cypress-image-snapshot/plugin"); const webpack = require("@cypress/webpack-preprocessor"); const preprocessor = require("@badeball/cypress-cucumber-preprocessor"); const values = {}; async function setupNodeEvents(on, config){ addMatchImageSnapshotPlugin(on, config); config.env.variable=process.env.NODE_ENV ?? 'NO HAY VARIABLE'; // INGRESA ALAS VAIABLES DE ENTORNO on("task", { guardar(valor){ const key = Object.keys(valor)[0]; values[key] = valor[key]; return null; }, obtener(key){ console.log('values', values); return values[key] ?? "No hay valor"; }, }); await preprocessor.addCucumberPreprocessorPlugin(on, config); on( "file:preprocessor", webpack({ webpackOptions: { resolve: { extensions: [".ts", ".js"], }, module: { rules: [ { test: /\.feature$/, use: [ { loader: "@badeball/cypress-cucumber-preprocessor/webpack", options: config, }, ], }, ], }, }, }) ); return config; }; module.exports = defineConfig({ e2e: { baseUrl: "https://pokedexpokemon.netlify.app", experimentalSessionAndOrigin: true, specPattern: "**/*.feature", supportFile: false, setupNodeEvents, excludeSpecPattern:[ "**/1-getting-started/*.js", "**/2-advanced-examples/*.js" ], //retries:2, /*retries: { runMode:2, openMode: 0 },*/ env:{ credentials: { user: "username", password: "password", }, }, specPattern:"**/*.feature", }, }); ```**login.js** ```js const { Given, When, Then, } = require('@badeball/cypress-cucumber-preprocessor'); const {loginPage} = require("../../pageObjects/loginPage.js"); Given('I am on the login page', () => { loginPage.visit(); loginPage.validatePageLogin(); }); When(`I fill in my login and password with {string} and {string}`, (username, password) => { loginPage.login(username, password); }); Then('I should validate that I\'m logged in', () => { loginPage.validateSuccessLogin(); }); ```**login.feature** ```js Feature: Login test Scenario: I login with correct credentials Given I am on the login page When I fill in my login and password with "username" and "password" Then I should validate that I'm logged in
Pasara entendimiento del negocio y de cada uno de los miembros es mejor que se vea una visión general de las pruebas automatizadas y que se entienda el comportamiento del usuario ya que es mas entendible para todos.
No se visualiza el link
En mi caso me funcionó con la siguiente configuración:
await preprocessor.addCucumberPreprocessorPlugin(on,config)
const options = { webpackOptions: { module: { rules: [ { test: /.feature$/, use: [ { loader: '@badeball/cypress-cucumber-preprocessor/webpack', options: config, }, ], }, ], }, },
};
on('file:preprocessor', webpack(options));
Los links de las dependencias requeridas en la clase
badeball/cypress-cucumber-preprocessor cypress/webpack-preprocessor