2016-07-11 2 views
4

質問タイトルのままです。テストを開始する前にループバックブートスクリプトが終了しているかどうかを確認する方法がわかりました。 は、サンプルプロジェクトでは:ループバックとモカ:サーバがブートスクリプトを終了するのを待ちます。

https://github.com/strongloop/loopback-example-relations

仕事をしているようだが、残念ながら、それはそれを解決しないテストフォルダ内のfileがあります。

start-server.js:

var app = require('../server/server'); 

module.exports = function(done) { 
    if (app.loaded) { 
    app.once('started', done); 
    app.start(); 
    } else { 
    app.once('loaded', function() { 
     app.once('started', done); 
     app.start(); 
    }); 
    } 
}; 

このスクリプトは次のようにrest test apiにロードされます。

before(function(done) { 
    require('./start-server'); 
    done(); 
}); 

をが、関数が呼び出されることはありません。これはスクリプトを使用するための正しい方法ですか?

私は次の実装で終了:

before(function (done) { 
    if (app.booting) { 
     console.log('Waiting for app boot...'); 
     app.on('booted', done); 
    } else { 
     done(); 
    } 
}); 

動作しますが、私はそのスタート - サーバスクリプトで戸惑いました。

before(function(done) { 
    require('./start-server')(done); 
}); 

を、実行がelse支店に行くがdoneが呼び出されることはありません。次のように私はbefore機能を変更@stalinアドバイス以下

EDIT

答えて

2

あなたのブートスクリプトは、(モデルスキーマをautomigrateするなど)、非同期関数を使用しているとき、それは動作しない場合があります。この

before(function(done) { 
    var server = require('./start-server'); 
    server(done); 
}); 
+0

はあなたに感謝、私は質問を更新しました:アプリケーションは、コールバックが終了するのを明示的にコールバックを呼び出すまで待つbooting = falseを設定しません。 – Sanandrea

0

を行うためにserver-script試しに行って機能を渡すことはありません。

// boot script with extra callback param: 
module.exports = function (app, cb) { 
    var db = app.dataSources.db; 

    // update all database models 
    db.autoupdate(function (err) { 
    if (err) throw err; 
    cb(); 
    }); 
}; 
関連する問題