GitLab-CI和node.js – 如何启动本地服务器然后运行testing?

我已经设置了GitLab-CI,并正在编写我的.gitlab-ci.yml来运行我的testing。 我的应用程序是用node.js编写的,文件如下所示:

 before_script: - npm install - node server.js stages: - test job_name: stage: test script: - npm run test 

我在启动服务器然后运行testing时遇到了麻烦,因为node server.js创build了一个永远不会存在的前台进程,除非您手动执行。 有没有办法启动服务器,然后继续,然后停止一旦testing完成?

或者我真的做错了,我的服务器应该开始在testing本身? 我所读的一切都只是说:“在另一个terminal上运行起始节点,然后在你的本地服务器上运行你的testing”,但是这在自动化的CI系统中显然没有意义。

我有完全相同的设置,使用gitlab-ci docker runner。 在启动testing之前,您不需要启动node server.js ,您可以让testing运行器处理它。 我使用摩卡+柴(chai-http)。 你也可以使用supertest来做同样的事情。

它在每次testing之前查找可用的端口,所以您不会以冲突的端口结束。

以下是它的外观:

 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 &

(在行尾用于返回提示符)

在你的例子中:

 before_script: - npm install - nohup node server.js & stages: - test job_name: stage: test script: - npm run test