Node.js 如何在运行测试套件时仅启动/停止NodeJS服务器一次
我正在为NodeJS编写selenium测试套件。下面是一个示例测试文件:Node.js 如何在运行测试套件时仅启动/停止NodeJS服务器一次,node.js,selenium-webdriver,sails.js,mocha.js,webdriver-io,Node.js,Selenium Webdriver,Sails.js,Mocha.js,Webdriver Io,我正在为NodeJS编写selenium测试套件。下面是一个示例测试文件: var Sails = require('sails'); // create a variable to hold the instantiated sails server var app; var client; // Global before hook before(function(done) { // Lift Sails and start the server Sails.lift({
var Sails = require('sails');
// create a variable to hold the instantiated sails server
var app;
var client;
// Global before hook
before(function(done) {
// Lift Sails and start the server
Sails.lift({
log: {
level: 'error'
},
environment: 'test',
port: 1338
}, function(err, sails) {
app = sails;
done(err, sails);
});
});
// Global after hook
after(function(done) {
app.lower(done);
});
beforeEach(function(done) {
client = require('webdriverjs').remote({desiredCapabilities:{browserName:'chrome'}});
client.init(done);
});
afterEach(function(done) {
client.end(done);
});
describe("Go to home page", function() {
it('should work', function(done) {
client
.url('http://localhost:1338/')
.pause(5000)
.call(done);
});
});
目前:
- 启动每个测试文件,它将启动Sails服务器
- 完成每个测试文件后,它会关闭Sails服务器
- 启动每个测试,它将启动浏览器
- 完成每个测试后,它将关闭浏览器
test:
@./node_modules/.bin/mocha -u bdd -R spec --recursive --timeout 15000
.PHONY: test
一种可能的解决方案是切换到使用
npmtest
,将测试执行行存储在package.json
文件中,然后利用预测试
和后测试
脚本阶段。在这些命令中,您可以执行一个脚本,分别启动服务器(startSailsServer.js
)和关闭服务器。然后,您可以在每个测试文件中删除服务器的启动和停止
因此,您的package.json
将有如下内容(您必须将启动/停止sails服务器逻辑移动到这些startSailsServer.js
和stopSailsServer.js
文件):
然后要运行测试,您需要执行
npm-test
感谢dylants的建议,我编辑了Makefile以利用“测试前/测试后”脚本阶段:
## Makefile
test:
/bin/bash test/script/startServer.sh
@./node_modules/.bin/mocha -u bdd -R spec --recursive --timeout 15000
/bin/bash test/script/stopServer.sh
## test/script/startServer.sh
# Start Selenium
start-selenium &
echo $! > tmp/selenium.pid
sleep 1
# Start Node server
NODE_ENV=test PORT=1338 node app.js &
echo $! > tmp/test.pid
## test/script/stopServer.sh
kill -SIGINT $(cat tmp/selenium.pid)
kill -SIGINT $(cat tmp/test.pid)
## Makefile
test:
/bin/bash test/script/startServer.sh
@./node_modules/.bin/mocha -u bdd -R spec --recursive --timeout 15000
/bin/bash test/script/stopServer.sh
## test/script/startServer.sh
# Start Selenium
start-selenium &
echo $! > tmp/selenium.pid
sleep 1
# Start Node server
NODE_ENV=test PORT=1338 node app.js &
echo $! > tmp/test.pid
## test/script/stopServer.sh
kill -SIGINT $(cat tmp/selenium.pid)
kill -SIGINT $(cat tmp/test.pid)