2016-09-28 14 views
0

私のテスト環境では、mochaをテストランナーとして使用しています。私は私が私のORMとしてsequelizeを使用していると私はそれがに設定forceフラグを付けてinitをしたいノード:モカ起動時に非同期関数を実行する

mocha --require setup.js 

を使用して起動時にモカを使用して実行するように構成されたsetup.jsファイル内の「テスト」としてNODE_ENVを設定しています本当。 syncの機能はどこで実行する必要がありますか?

import models from '../src/data/models'; 
models.sync({ 
    force: true 
}); 

これは非同期機能であるため、同期ステージが完了する前にテストが開始される可能性があります。

+0

前もってフックを使用する必要があります。 syncは約束を返すので、(function(){return models.sync({force:true})}))の前に と書くべきです。 – aray12

+0

このフックはどこに書きますか?私はすべてのテストを保持するメインファイルを持っていないので、次のようなテストを実行します: 'mocha \" src/**/*。test.js \ "--require test/setup.js --compilers js: babel-register' – itaied

+0

DBに依存するすべてのテストに対してDBを明示的に再構築する方法について、以下でコメントしました。あなたがまだいくつかの世界的なフックに興味があるなら私は私が投稿した別の答えをチェックすることをお勧めしますhttp://stackoverflow.com/questions/28191243/how-can-i-make-mocha-load-a-helper-js-file- that-defines-global-hooks-or-utilitie/36266849#36266849 - 基本的に、記述ブロックの外側に配置することによってグローバルフックを書くことができます。繰り返しますが、変異を追跡するのは明白ではなく、難しいので、実際にはお勧めしません。 – aray12

答えて

1

グローバルなbeforeハンドラに実行するテストの前に実行する必要がある初期化またはコードを追加します。

before(function() { 
    //models code here 
    return models.sync({}); 
}) 
+0

この前に「前に」書くのですか?テストファイルにはハンドラの前に多くのハンドラがありますが、すべてのテストを含むプライマリファイルはありません。 – itaied

+0

セットアップが必要なテストで 'require 'できるヘルパーファイルを追加します。 – ckross01

+0

しかし、 'sync'は高価なプロセスです。すべてのテストの前に一度しか起こらないようにしたいと思います。 – itaied

関連する問題