【问题标题】:How to start/stop NodeJS server only once when running test suites运行测试套件时如何仅启动/停止 NodeJS 服务器一次
【发布时间】:2014-05-30 10:31:49
【问题描述】:

我正在为 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({
    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 服务器
  • 开始每个测试,它会启动浏览器
  • 完成每个测试后,它会关闭浏览器

因此,如果我有 10 个 selenium 测试文件,它将启动/关闭 Sails 服务器 10 次。有没有办法只启动 Sails 服务器一次,运行所有测试文件,然后将其关闭?

我正在使用 Sails + Mocha + webdriverjs 堆栈。这是我的 Makefile 配置

test:
    @./node_modules/.bin/mocha -u bdd -R spec --recursive --timeout 15000
.PHONY: test

【问题讨论】:

    标签: node.js selenium-webdriver sails.js mocha.js webdriver-io


    【解决方案1】:

    一种可能的解决方案是改用npm test,将测试执行行存储在package.json 文件中,然后利用pretestposttest 脚本阶段。在这些命令中,您可以执行一个脚本,该脚本将分别启动您的服务器 (startSailsServer.js) 和关闭您的服务器。然后,您可以在每个测试文件中取出服务器的启动和停止。

    所以你的package.json 会有这样的东西(你必须将启动/停止帆服务器逻辑移动到这些startSailsServer.jsstopSailsServer.js 文件):

    "scripts": {
        "pretest": "node startSailsServer.js",
        "test": "./node_modules/.bin/mocha -u bdd -R spec --recursive --timeout 15000",
        "posttest": "node stopSailsServer.js"
    }
    

    然后要运行您的测试,您将执行 npm test

    【讨论】:

      【解决方案2】:

      感谢 dylants 的建议,我编辑了 Makefile 以利用“pre/post-test”脚本阶段:

      ## 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多