0

当使用 Protractor 驱动程序使用 CodeceptJS 运行我的测试时,测试成功运行但进程没有退出,所以我每次都必须强制停止它,而且我也无法在我的 CI 服务器上运行它们,否则它总是会超时。我的codecept.conf.js

const conf = require('../config/config');

exports.config = {
  tests: './e2e/**/*.spec.js',
  output: './e2e/reports',
  helpers: {
    Protractor: protractor.config,
    ProtractorHelper: {
      require: './e2e/protractor.helper.js'
    }
  },
  name: 'test',
  timeout: 10000,
  bootstrap: './e2e/before-launch.js',
  mocha: {
    reporterOptions: {
      reportDir: './reports'
    }
  }
};

我的protractor.conf.js

const conf = require('../config/config');

exports.config = {
  scriptsTimeout: 11000,
  browser: 'chrome',
  capabilities: {
    chromeOptions: {
      args: process.env.CI ? [
        '--no-sandbox',
        // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
        '--headless',
        '--disable-gpu',
        // Without a remote debugging port, Google Chrome exits immediately.
        '--remote-debugging-port=9222',
        '--disable-web-security'
      ] : []
    }
  },
  directConnect: true,
  url: conf.e2e.baseUrl,
  noGlobals: true,
  rootElement: 'body'
};

before-launch.js这基本上只是为网站提供服务:

const conf = require('../config/config');

require('connect')().use(require('serve-static')(conf.e2e.paths.build)).listen(conf.e2e.servePort);

我在用:

  • CodeceptJS 版本:1.4.1
  • NodeJS 版本:10.1.0
  • 量角器版本:5.4.0
4

2 回答 2

0

您可以创建一个 gulp 任务

使用 gulp 量角器

var protractor = require("gulp-protractor").protractor;
var spawn = require('child_process').spawn; 
function runProtractorConfig() {
    gulp.src('./**/*-page.spec.js')
        .pipe(protractor({
            configFile: 'protractor.config.js'
        }))
        .on('error', function (e) {
            throw e;
        });
}

现在您的进程将自动退出。

于 2018-08-15T05:56:45.267 回答
0

事实证明它没有退出,因为connect它提供了网站并在最后继续收听,所以我将 codecept 配置更改为:

bootstrap: 'run-server.js',
teardown: 'run-server.js',

并在run-server.js

const http = require('http');
const connect = require('connect');

let app = connect();
app.use(require('serve-static')('public'));
let server = null;

module.exports = {
  bootstrap: function(done) {
    server = http.createServer(app);
    server.listen(3001);
    done();
  },
  teardown: function(done) {
    server.close();
    done();
  }
}

现在它退出就好了

于 2018-09-21T08:52:43.770 回答