GitLab-CI 和 node.js - 如何启动本地服务器然后 运行 测试?
GitLab-CI and node.js - how to start a local server then run tests?
我已经设置了 GitLab-CI,并且正在将我的 .gitlab-ci.yml
写入 运行 我的测试。我的应用程序是用 node.js 编写的,文件如下所示:
before_script:
- npm install
- node server.js
stages:
- test
job_name:
stage: test
script:
- npm run test
我在实际启动服务器然后 运行 测试时遇到了问题,因为 node server.js
创建了一个永远不存在的前台进程,除非您手动执行此操作。有没有办法启动服务器,然后继续,然后在测试完成后停止它?
或者我真的做错了吗,我的服务器应该自己开始测试吗?我读到的所有内容都只是说 "start node then in another terminal run your tests against your local server" 但这在自动化 CI 系统中显然毫无意义?
我有完全相同的设置,带有 gitlab-ci docker runner。您不需要在启动测试之前启动 node server.js
,您可以让测试运行器处理它。我使用 Mocha + Chai(带有 chai-http)。您也可以使用 supertest 来做同样的事情。
它会在每次测试前查找可用端口,这样您就不会遇到端口冲突。
这是它的样子:
var chai = require('chai');
var chaiHttp = require('chai-http');
// Interesting part
var app = require('../server/server');
var loginUser = require('./login.js');
var auth = {token: ''};
chai.use(chaiHttp);
chai.should();
describe('/users', function() {
beforeEach(function(done) {
loginUser(auth, done);
});
it('returns users as JSON', function(done) {
// This is what launch the server
chai.request(app)
.get('/api/users')
.set('Authorization', auth.token)
.then(function (res) {
res.should.have.status(200);
res.should.be.json;
res.body.should.be.instanceof(Array).and.have.length(1);
res.body[0].should.have.property('username').equal('admin');
done();
})
.catch(function (err) {
return done(err);
});
});
});
或者,您可以使用 nohup
命令在后台启动您的服务器。
$ nohup node server.js &
(行尾的&
用于return提示)
在你的例子中:
before_script:
- npm install
- nohup node server.js &
stages:
- test
job_name:
stage: test
script:
- npm run test
我已经设置了 GitLab-CI,并且正在将我的 .gitlab-ci.yml
写入 运行 我的测试。我的应用程序是用 node.js 编写的,文件如下所示:
before_script:
- npm install
- node server.js
stages:
- test
job_name:
stage: test
script:
- npm run test
我在实际启动服务器然后 运行 测试时遇到了问题,因为 node server.js
创建了一个永远不存在的前台进程,除非您手动执行此操作。有没有办法启动服务器,然后继续,然后在测试完成后停止它?
或者我真的做错了吗,我的服务器应该自己开始测试吗?我读到的所有内容都只是说 "start node then in another terminal run your tests against your local server" 但这在自动化 CI 系统中显然毫无意义?
我有完全相同的设置,带有 gitlab-ci docker runner。您不需要在启动测试之前启动 node server.js
,您可以让测试运行器处理它。我使用 Mocha + Chai(带有 chai-http)。您也可以使用 supertest 来做同样的事情。
它会在每次测试前查找可用端口,这样您就不会遇到端口冲突。
这是它的样子:
var chai = require('chai');
var chaiHttp = require('chai-http');
// Interesting part
var app = require('../server/server');
var loginUser = require('./login.js');
var auth = {token: ''};
chai.use(chaiHttp);
chai.should();
describe('/users', function() {
beforeEach(function(done) {
loginUser(auth, done);
});
it('returns users as JSON', function(done) {
// This is what launch the server
chai.request(app)
.get('/api/users')
.set('Authorization', auth.token)
.then(function (res) {
res.should.have.status(200);
res.should.be.json;
res.body.should.be.instanceof(Array).and.have.length(1);
res.body[0].should.have.property('username').equal('admin');
done();
})
.catch(function (err) {
return done(err);
});
});
});
或者,您可以使用 nohup
命令在后台启动您的服务器。
$ nohup node server.js &
(行尾的&
用于return提示)
在你的例子中:
before_script:
- npm install
- nohup node server.js &
stages:
- test
job_name:
stage: test
script:
- npm run test