在e-2-e测试之前运行角度应用程序

时间:2017-06-03 19:35:12

标签: angular protractor

我已经针对角度2应用程序编写了一些量角器测试。它们都位于同一个存储库(应用程序和测试)中。在运行这些测试之前,我需要在localhost上运行应用程序(npm start)。什么是实现这一目标的最佳方式?

2 个答案:

答案 0 :(得分:3)

有许多构建工具可以实现此目的(例如。GruntGulp等等。)。就个人而言,我喜欢使用npm scripts,因为它们很简单,已经是你项目的一部分。例如,在package.json中,您可以添加以下内容:

  "scripts": {
    "pretest": "npm install",
    "test": "protractor conf.js"
  },

然后,如果您通过npm test运行测试,npm install应该在测试运行之前运行。

答案 1 :(得分:1)

除了@Brine他的回答,这就是我为一个正在研究的Angular 2项目所做的。我需要在运行测试之前启动服务器。

我已经创建了一个.js文件

  • 在端口5555上运行量角器之前启动Angular应用程序
  • 运行量角器测试,如果你需要传递参数,但是它没有在这个脚本中添加
  • 我正在使用NPM脚本来运行量角器,但您可以在const child = child_process.exec('npm run e2e.local');部分
  • 中添加任何内容

// The server.js file
const express = require('express');
const path = require('path');
const app = express();
const child_process = require('child_process');

const e2e = path.resolve(process.cwd(), './e2e-tests/config/');
const port = 5555;
const appFolder = path.resolve(process.cwd(), './dist/your-app-folder/');

/**
  * Start a server
  */
class Protractor {
  server(port, dir) {
    app.set('port', port);
    // Pass the folder the app should be run from
    app.use(express.static(dir));

    return new Promise((resolve) => {
      let server = app.listen(port, () => {
        resolve(server);
      });
    });
  }
}

/**
 * Start a server and run protractor.
 */
(() => {
  process.env.LANG = 'en_US.UTF-8';
  // I'm having some npm scripts that run the protractor config
  const child = child_process.exec('npm run e2e.local');
  new Protractor()
    // Start the server on port 5555
    .server(port, appFolder)
    .then((server) => {
      // Start protractor
      child.stdout.pipe(process.stdout);
      child.stderr.pipe(process.stderr);
      // Stop the server if Protractor crashes or we're done testing
      child.on('exit', () => {
        server.close();
      });
    });
})();

我希望这会对你有所帮助。