1

だから、私は分度器 (jasmine 2) を使用して非常に優れた e2e テストを書いてきましたが、要件が変更されました: Jasmine2 から Cucumber に切り替える必要があります。現在、Cucumber は分度器によって直接サポートされていません。カスタム フレームワークのセットアップを試みました = > 失敗しました。前述のように、私は gulp-angular-protractorを使用しています。これは、優れた簡単な作業環境 (テストの実行中の webdriver のオン/オフ、gulp コマンドなど) を提供しますが、引き続き維持したいと考えています。

ここに私の設定があります:

パッケージ.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);
});

分度器.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
};

ダミーテスト:

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;

プロジェクト フォルダ ツリーは次のようになります。 きゅうりと分度器

問題: gulp e2e を実行すると、次のようになります。

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

C:\Users\Documents\dev\node_modules\gulp-angular-protractor\node_m dules\gulp-protractor\node_modules\protractor\lib\runner.js:337:35 at _fulfilled (C:\Users\Documents\dev\ node_modules\gulp-angular-protr ctor\node_modules\gulp-protractor\node_modules\protractor\node_modules\q\q.js:7 7:54) self.promiseDispatch.done (C:\Users\Documents\dev\node_modules\) Promise.promise.promiseDispatch (C:\Users\Documents\dev\node_modul s\gulp- angular-protractor\node_modules\gulp-protractor\node_modules\protractor\ ode_modules\q\q.js:759:13) C:\Users\Documents\dev\node_modules\gulp-angular-protractor\node_m dules\gulp-protractor \node_modules\protractor\node_modules\q\q.js:525:49 at flush (C:\Users\Documents\dev\node_modules\gulp-angular-protractor node_modules\gulp-protractor\node_modules\protractor\node_modules\q\q.js:108:17

私は何が間違っているのですか?

4

2 に答える 2

0

私が言いたかったのは、分度器はそのままでは Cucumber を提供しなくなったということです。提案どおり「分度器-キュウリ-フレームワーク」を使用して機能 させました。ここに私の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
};
于 2016-05-23T20:07:18.493 に答える