【问题标题】:GitLab-CI and node.js - how to start a local server then run tests?GitLab-CI 和 node.js - 如何启动本地服务器然后运行测试?
【发布时间】:2016-05-02 13:00:59
【问题描述】:

我已经设置了 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 创建了一个永远不存在的前台进程,除非您手动执行此操作。有没有办法启动服务器,然后继续运行,然后在测试完成后停止它?

或者我真的做错了,我的服务器是否应该自己开始测试?我读到的所有内容都只是说“启动节点,然后在另一个终端中针对本地服务器运行测试”,但这显然在自动化 CI 系统中毫无意义?

【问题讨论】:

    标签: node.js mocha.js gitlab gitlab-ci gitlab-ci-runner


    【解决方案1】:

    或者,您可以使用nohup 命令在后台启动您的服务器。

    $ nohup node server.js &

    (行尾&用于返回提示)

    在你的例子中:

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

    【讨论】:

    • 这是实际答案。谢谢,先生!
    【解决方案2】:

    我有完全相同的设置,使用 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);
        });
      });
    });
    

    【讨论】:

    • 你能给我看看你的 gitlab-ci.yml 吗?我也这样做,但不知道如何在构建生产之前运行测试
    • 这与问题关系不大。也许正在运行的测试正在浏览器中运行,因此您无法从测试本身启动服务器。
    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 2021-12-25
    • 2016-01-01
    • 1970-01-01
    • 2015-07-02
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多