2016-05-12 10 views
1

Also habe ich sehr schöne E2e Tests mit Winkelmesser (Jasmine 2) geschrieben, aber jetzt haben sich meine Anforderungen geändert: Ich muss von Jasmine2 zu Gurke wechseln. Ab sofort wird Cucumber nicht mehr direkt von Protractor unterstützt. Ich habe versucht, ein benutzerdefiniertes Framework Setup => nicht erfolgreich. Wie erwähnt, benutze ich gulp-angular-protractor, die mir eine großartige und einfache Arbeitsumgebung bieten (Turn-on/Off Webdriver während Tests, Schluckbefehl usw.) und ich möchte es immer noch behalten.gulp-eckig-Winkelmesser Integration mit Gurke

hier ist meine config:

package.json

... 

    "devDependencies": { 
    "angular-mocks": "^1.5.1", 
    "browser-sync": "^2.10.0", 
    "cucumber": "^0.10.2", 
    "del": "^2.1.0", 
    "gulp": "^3.9.1", 
    "gulp-angular-protractor": "^0.1.1", 
... 

gulpfile.js:

gulp.task('e2e', function(callback) { 
    gulp 
     .src(['./dist/**/*.e2e.js']) 
     .pipe(gulpProtractorAngular({ 
      'configFile': 'protractor.conf.js', 
      'debug': false, 
      'autoStartStopServer': true 
     })) 
     .on('error', function(e) { 
      console.log(e); 
     }) 
     .on('end', callback); 
}); 

protractor.conf.js

exports.config = { 
    baseUrl: 'http://localhost:3000', 
    specs: ['dist/**/*.feature'], 
    directConnect: true, 
    exclude: [], 
    multiCapabilities: [{ 
     browserName: 'chrome' 
    }], 
    allScriptsTimeout: 110000, 
    getPageTimeout: 100000, 

    framework: 'custom', 
    frameworkPath: require.resolve('cucumber'), 
    cucumberOpts: { 
     require: 'dist/**/*steps.js', 
     format: 'pretty' 
    }, 

    /** 
    * ng2 related configuration 
    * 
    * useAllAngular2AppRoots: tells Protractor to wait for any angular2 apps on the page instead of just the one matching 
    * `rootEl` 
    * 
    */ 
    useAllAngular2AppRoots: true 
}; 

Dummy-Tests:

world.js

module.exports = function() { 

    this.World = function World(callback) { 
    this.prop = "Hello from the World!"; // this property will be available in step definitions 

    this.greetings = function(name, callback) { 
     console.log("\n----Hello " + name); 
     callback(); 
    }; 

    callback(); // tell Cucumber we're finished and to use 'this' as the world instance 
    }; 
} 

login.component.feature

Feature: Sample 

Scenario: First sample 
Given this is the first sample 

Scenario: Second sample 
Given this is the second sample 

login.component.steps.js

var sampleSteps = function() { 

    this.Given(/^this is the first sample$/, function (callback) { 
     console.log("\n----" + this.prop); 
     callback(); 
    }); 

    this.Given(/^this is the second sample$/, function (callback) { 
     this.greetings("everybody", callback); 
    }); 

}; 

module.exports = sampleSteps; 

Projektordnerstruktur wie folgt aussieht: Cucumber with protractor

Problem: Als ich schluck e2e laufen erhalte ich:

launcher] Error: TypeError: require(...).run is not a function 

unter C: \ Benutzer \ Dokumente \ dev \ node_modules \ schlucke-Winkel Winkelmesser \ node_m Dules \ schluck-Transporteur \ node_modules \ Winkelmesser \ lib \ runner.js: 337: 35 um _fulfilled (C: \ Benutzer \ Dokumente \ dev \ node_modules \ gulp-eckig-protr ctor \ node_modules \ gulp-winkelmesser \ node_modules \ winkelmesser \ node_modules \ q \ q.js: 7 7:54) bei self.promiseDispatch.done (C: \ Benutzer \ Dokumente \ dev \ node_modules \ gul -Winkel-Winkelmesser \ node_modules \ gulp-Winkelmesser \ node_modules \ Winkelmesser \ node_m dules \ q \ q.js: 826: 30) bei Promise.promise.promiseDispatch (C: \ Benutzer \ Dokumente \ dev \ node_modul s \ gulp-Winkel-Winkelmesser \ node_modules \ gulp-Winkelmesser \ node_modules \ Winkelmesser \ ode_modules \ q \ q.js: 759: 13) bei C: \ Benutzer \ Dokumente \ dev \ node_modules \ gulp-Winkel-Winkelmesser \ node_m dules \ gulp-Winkelmesser \ node_modules \ Winkelmesser \ node_modules \ q \ q.js: 525: 49 bei Flush (C: \ Benutzer \ Dokumente \ dev \ node_modules \ schlucke-Winkel Winkelmesser node_modules \ schlucke-Transporteur \ node_modules \ Winkelmesser \ node_modules \ q \ q.js: 108: 17

Jede Idee, was mache ich falsch?

Antwort

0

Vor allem, warum sagst du, dass Winkelmesser Gurke nicht unterstützt? Ich meine, Sie müssen es als eine benutzerdefinierte FW verwenden, und Sie müssen Folgendes in Ihrer Konfigurationsdatei tun, um in der Lage sein, Winkelmesser-CucumberJS zu verwenden ...

framework: 'custom', 
    frameworkPath: require.resolve('protractor-cucumber-framework'), 
    specs: [ 
     'e2e/features/*.feature' 
    ], 
    cucumberOpts: { 
     require: './e2e/features/*/*.js', 
     format: 'pretty', 
     keepAlive: true 
    } 

Und in Bezug auf die großen Schluck Aufgabe, ich habe mit:

"gulp-protractor": "^2.1.0", 

die Aufgabe wie folgt konfiguriert ist:

/** 
* run protractor 
*/ 


var args = require('yargs').argv; 

module.exports = function(gulp, plugins) { 
    return function (done) { 
     var protractorConfig = '', 
      testConfig = '', 
      environment = args.environment || 'devel', 
      tag = args.tag || '@Sanity', 
      baseUrl; 

     if (!args.baseUrl) { 
      baseUrl = 'XXXXXXXX'; 
     } else if (args.baseUrl.match(/^(?:https?\:)?\/\//)) { 
      baseUrl = args.baseUrl; 
     } else { 
      baseUrl = 'XXXXXXXX' + args.baseUrl + '/'; 
     } 

     switch(environment) { 
      case 'devel' : 
       protractorConfig = 'e2e/protractor.config.devel.js'; 
       testConfig = '../config/devel'; 
       break; 
      case 'live' : 
       protractorConfig = 'e2e/protractor.config.live.js'; 
       testConfig = '../config/live'; 
       break; 
      case 'remote' : 
       protractorConfig = 'e2e/protractor.config.remote.js'; 
       testConfig = '../config/live'; 
       break; 
      default: 
      case 'build' : 
       protractorConfig = 'e2e/protractor.config.build.js'; 
       testConfig = '../config/build'; 
       break; 
     } 

     gulp.src([ 
      'e2e/features/*.feature' 
     ]) 
      .pipe(plugins.protractor.protractor({ 
       configFile: protractorConfig, 
       args: [ 
        '--verbose', 
        '--no-stackTrace', 
        '--params.test.config', testConfig, 
        '--baseUrl', baseUrl, 
        '--cucumberOpts.tags', tag 
       ] 
      })) 
      .on('error', function() { 
       done(); 
       process.exit(1); 

      }); 
    }; 
}; 

hoffe, das hilft

0

Was ich gemeint ist: Winkelmesser dient Gurke nicht mehr aus der Box. Ich habe es mit "protractor-cucumber-framework" wie vorgeschlagen funktioniert. Hier ist meine protractor.conf:

exports.config = { 
    baseUrl: 'http://localhost:3000', 
    specs: ['dist/**/*.feature'], 
    directConnect: true, 
    exclude: [], 
    multiCapabilities: [{ 
     browserName: 'chrome' 
    }], 
    allScriptsTimeout: 110000, 
    getPageTimeout: 100000, 

    framework: 'custom', 
    frameworkPath: require.resolve('protractor-cucumber-framework'), 
    cucumberOpts: { 
     require: 'dist/**/*steps.js', 
     format: 'pretty', 
     tags: '@Login', 
     keepAlive: false 
    }, 
//  cucumberOpts: { 
//  require: 'dist/**/steps.js', 
//  tags: '@dev', 
//  format: 'progress', 
//  profile: false, 
//  'no-source': true 
// } 

    /** 
    * ng2 related configuration 
    * 
    * useAllAngular2AppRoots: tells Protractor to wait for any angular2 apps on the page instead of just the one matching 
    * `rootEl` 
    * 
    */ 
    useAllAngular2AppRoots: true 
};