3

NodeJS 用のセレン テスト スイートを作成しています。サンプル テスト ファイルの 1 つを次に示します。

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 個のセレン テスト ファイルがある場合、Sails サーバーを 10 回起動/シャットダウンします。Sails サーバーを 1 回だけ起動し、すべてのテスト ファイルを実行してからシャットダウンする方法はありますか?

Sails + Mocha + webdriverjs スタックを使用しています。これが私のMakefile構成です

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

2 に答える 2

5

考えられる解決策の 1 つは、 を使用するように切り替えnpm test、テスト実行行をpackage.jsonファイルに保存してから、pretestおよびposttestスクリプト フェーズを利用することです。これらのコマンド内で、サーバーを起動するスクリプト ( 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

于 2014-05-30T16:48:05.813 に答える