首页 文章

gulp-angular-protractor与黄瓜整合

提问于
浏览
1

所以,我一直在使用量角器(jasmine 2)编写非常好的e2e测试,但现在我的要求已经改变了:我需要从Jasmine2切换到Cucumber . 截至目前,Protractor已不再直接支持Cucumber . 我尝试了自定义框架设置=>不成功 . 如上所述,我正在使用gulp-angular-protractor,它为我提供了一个非常简单的工作环境(在运行测试时打开/关闭webdriver,gulp命令等),我仍然希望保留它 .

这是我的配置:

的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
};

虚拟测试:

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;

项目文件夹树如下所示:
Cucumber with protractor

问题:当我运行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 \ self.promiseDispatch.done上的node_modules \ gulp-angular-protr ctor \ node_modules \ gulp-protractor \ node_modules \ protractor \ node_modules \ q \ q.js:7 7:54)(C:\ Users \ Documents \ dev \ node_modules \在Promise.promise.promiseDispatch(C:\ Users \ Documents \ dev \ node_modul s \ gulp-)中的gul -angular-protractor \ node_modules \ gulp-protractor \ node_modules \ protractor \ node_m dules \ q \ q.js:826:30) 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在flush(C:\ Users \ Documents \ dev \ node_modules \ gulp-angular-protractor node_modules \ gulp-protractor \ node_modules \ protractor \ node_modules \ q \ q的.js:108:17

知道我做错了什么吗?

2 回答

  • 0

    首先,你为什么说Protractor不支持Cucumber?我的意思是,您需要将其用作自定义FW,并且您需要在配置文件中执行以下操作才能使用Protractor-CucumberJS ...

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

    关于gulp任务,我一直在使用:

    "gulp-protractor": "^2.1.0",
    

    让任务配置如下:

    /**
     * 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);
    
                });
        };
    };
    

    希望这可以帮助

  • 0

    我的意思是:量角器不再提供开箱即用的Cucumber . 我按照建议使用"protractor-cucumber-framework"使其工作 . 这是我的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
    };
    

相关问题