unitarias pruebas karma angularjs testing jasmine cucumber protractor

angularjs - karma - pruebas unitarias angular 5



Cómo usar Jasmine and CucumberJS con transportador (2)

Estoy buscando usar Protractor, CucumberJS y Jasmine para probar mi proyecto. ¿Cómo uso Jasmine y CucumberJS con Transportador? Aquí está la configuración del proyecto que he creado:

/ ruta / a / myproj / protractor.conf.js

exports.config = { seleniumServerJar: ''node_modules/protractor/selenium/selenium-server-standalone-2.45.0.jar'', specs: [ ''features/*.feature'' ], baseUrl: ''http://localhost:8080'', multiCapabilities: [ { ''browserName'': ''chrome'' } ], allScriptsTimeout: 380000, getPageTimeout: 20000, framework: ''cucumber'', cucumberOpts: { require: ''features/stepDefinitions.js'', format: ''summary'' } };

Como puede ver, este proyecto usa "pepino" como marco. ¿Cómo agrego el marco de Jasmine junto a CucumberJS? ¿Sería esto a través del archivo de configuración del transportador o en algún otro lugar del código?

/ ruta / a / myproj / features / demo.feature

Feature: Some terse yet descriptive text of what is desired Scenario: Some determinable business situation Given some precondition

/ ruta / a / myproj / features / stepDefinitions.js

module.exports = function() { this.Given(/^some precondition$/, function (callback) { expect(true).toEqual(true); callback(); }); };

Cuando se ejecuta esto, "esperar" no está definido, presumiblemente porque Jasmine no se ha integrado, y se espera que sea global junto con él. Aquí está el mensaje de error completo:

$ $(npm bin)/protractor protractor.conf.js Starting selenium standalone server... [launcher] Running 1 instances of WebDriver Selenium standalone server started at http://192.168.1.115:59957/wd/hub (::) failed steps (::) ReferenceError: expect is not defined at World.<anonymous> (/path/to/myproj/features/stepDefinitions.js:3:5) at process._tickCallback (node.js:355:11) Failing scenarios: /path/to/myproj/features/demo.feature:3 # Scenario: Some determinable business situation 1 scenario (1 failed) 1 step (1 failed) Shutting down selenium standalone server. [launcher] 0 instance(s) of WebDriver still running [launcher] chrome #1 failed 1 test(s) [launcher] overall: 1 failed spec(s) [launcher] Process exited with error code 1

/ ruta / a / myproj / paquete.json

{ "name": "myproj", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo /"Error: no test specified/" && exit 1" }, "author": "", "license": "ISC", "devDependencies": { "cucumber": "0.4.9", "protractor": "git+https://github.com/angular/protractor.git#0262268fa43b9eefac815d986740efa07bb15818" } }

Nota: Estoy usando un compromiso particular para el repositorio de Protractor Git en mi paquete.json, porque la última versión (2.1.0) tiene un error que impide la integración con CucumberJS.



CucumberJS y Jasmine son mutuamente excluyentes; no podrás usar las expectativas de Jasmine en los pasos de Pepino. Lo que tienes que hacer en su lugar es cargar un módulo de expectativa por separado. Sugeriría a Chai con el plugin chai-as-promised . (chai-as-promised simplifica el proceso de escribir expectativas en torno a las promesas. Protractor anula la función expect() de Jasmine para hacer esto detrás de las escenas) Lo más probable es que quieras hacer esto en tu mundo ya que esa es la forma más fácil para proporcionarle acceso en sus Definiciones de pasos. Tu mundo se vería así:

var World, chai, chaiAsPromised; chai = require(''chai''); chaiAsPromised = require(''chai-as-promised''); World = function World(callback) { chai.use(chaiAsPromised); this.expect = chai.expect; callback(); } module.exports.World = World;

Luego, en su archivo de Definiciones de pasos, solo cargue en la documentación de World per the CucumberJS y sus Definiciones de pasos tendrán un alcance para proporcionar acceso a todas las propiedades del mundo:

module.exports = function() { this.World = require("path/to/world.js").World; this.Given(/^some precondition$/, function (callback) { this.expect(true).to.equal(true); callback(); }); };

Ahora, para un autodesarrollo desvergonzado: si estás usando Protractor con CucumberJS, recomendaría mirar un módulo que ayudé a construir llamado CukeFarm . Viene preconfigurado con algunos módulos que le resultarán útiles y proporciona una serie de Definiciones generales de pasos que se pueden usar en la mayoría de los proyectos.