8

express.jsを使用して簡単なWebアプリを作成し、 jasmine-nodeでテストしたいと思います。これまでのところ正常に動作していますが、私の問題は、テストを実行する前に毎回手動でサーバーを起動する必要があることです。

テストのためだけにサーバーを(別のポートで、次に開発用のポートで)実行し、後でサーバーを強制終了するスペックヘルパーを作成する方法について教えてください。

4

4 に答える 4

17

これが私がすることです:

ノードアプリケーションサーバーをセットアップし(高速で)、2つのメソッドをエクスポートするノードプロジェクトのルート内にserver.jsファイルがあります

exports.start = function( config, readyCallback ) {

    if(!this.server) {

        this.server = app.listen( config.port, function() {

            console.log('Server running on port %d in %s mode', config.port, app.settings.env);

            // callback to call when the server is ready
            if(readyCallback) {
                readyCallback();
            }
        });
    }
};

exports.close = function() {
    this.server.close();
};

この時点で、 app.jsファイルは単純になります。

var server = require('./server');
server.start( { port: 8000 } );

したがって、ファイル/フォルダーの基本構造は次のようになります。

src
   app.js
   server.js

この分離により、サーバーを正常に実行できます

node src/app.js

..および/またはカスタム ノード スクリプトからそれを要求します。これは、次のようにテストを実行するノード スクリプト (または jake/grunt/whatever タスク) である可能性があります。

/** my-test-task.js */

// util that spawns a child process
var spawn = require('child_process').spawn;

// reference to our node application server
var server = require('./path/to/server.js');

// starts the server
server.start( { port: 8000 }, function() {

    // on server ready launch the jasmine-node process with your test file
    var jasmineNode = spawn('jasmine-node', [ '.path/to/test/file.js' ]);

    // logs process stdout/stderr to the console
    function logToConsole(data) {
        console.log(String(data));
    }
    jasmineNode.stdout.on('data', logToConsole);
    jasmineNode.stderr.on('data', logToConsole);

    jasmineNode.on('exit', function(exitCode) {
        // when jasmine-node is done, shuts down the application server
        server.close();
    }
});
于 2012-11-14T12:17:02.357 に答える
0

私は Mocha を使用していますが、これは非常によく似ていますが、同じ原則が適用されるはずです。 main 内の「beforeEach」フックでファイルを試すrequireことができます。それはあなたのためにそれを起動するはずです。app.jsdescribe

于 2012-11-01T16:50:40.040 に答える
0

server.jsで呼び出すコードを使用すると仮定するとapp.listen()、実行ごとにファイルを必要とせず、1回だけ必要とし、次のような2つの関数を用意します

startServer = -> app.listen(3000)
stopServer = -> app.close()

beforeEach次に、これらを使用できますafterEach

于 2012-11-10T23:15:25.637 に答える
-1

開発中にテストを自動化するためにさらに一歩進みたい場合は、ターミナルラインに移動して実行できます

jasmine-node . --autotest

その後、Jasmine はプロジェクト内のすべてのファイルをリッスンし続け、ファイルに変更を加えるたびに、そのコードの一部がテストに違反しているかどうかを通知します;)

于 2014-10-12T10:29:14.437 に答える