codeceptjs 运行 量角器不退出

codeceptjs running with protractor does not exit

当运行使用 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);

我正在使用:

您可以创建一个 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;
        });
}

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

原来它没有退出是因为 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();
  }
}

现在退出就好了