我已经针对角度2应用程序编写了一些量角器测试。它们都位于同一个存储库(应用程序和测试)中。在运行这些测试之前,我需要在localhost上运行应用程序(npm start)。什么是实现这一目标的最佳方式?
答案 0 :(得分:3)
有许多构建工具可以实现此目的(例如。Grunt,Gulp等等。)。就个人而言,我喜欢使用npm scripts,因为它们很简单,已经是你项目的一部分。例如,在package.json
中,您可以添加以下内容:
"scripts": {
"pretest": "npm install",
"test": "protractor conf.js"
},
然后,如果您通过npm test
运行测试,npm install
应该在测试运行之前运行。
答案 1 :(得分:1)
除了@Brine他的回答,这就是我为一个正在研究的Angular 2项目所做的。我需要在运行测试之前启动服务器。
我已经创建了一个.js
文件
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();
});
});
})();
我希望这会对你有所帮助。