2016-12-09 13 views
1

私は現在、Mochaを使用して問題なく動作するAPIのテストを実行しています。テスト配列は、変数の中に格納されています - ファイルの先頭に「テスト」します。テキストファイルからテスト情報を読み込み、テストを実行する前にその情報を変数に解析したい(一度)。テストを実行する前にmochaのファイルからどのように読み込みますか?

私が前に使用することを試みた()の両方の同期および非同期(下記)

//Synchronously 
describe("API Tests", function (done) { 
    before(function(){ 
     tests = fs.readFileSync('./json.txt', 'utf8'); 
     tests = JSON.parse(tests); 
    }); 
    for (var i = 0; i < tests.length; i++) { 
     runTest(tests[i]); 
    } 
    done(); 
}); 

//Asynchronously 
describe("API Tests", function() { 
var tests = ""; 
before(function(){ 
    fs.readFile('./json.txt', 'utf8', function(err, fileContents) { 
    if (err) throw err; 
    tests = JSON.parse(fileContents); 
    }); 
}); 

for (var i = 0; i < tests.length; i++) { 
    runTest(tests[i]); 
}}); 

ノードは、(それがないもの)が存在しないファイルを示すエラーを返し 。

さらに、私はread(両方とも同期的かつ非同期的)にファイルを実行しようとしました。そのケースを検出することができないように見え、「テストは見つかりませんでした」と返されます。

var tests; 
fs.readFile('./json.txt', 'utf8', function(err, fileContents) { 
if (err) throw err; 
tests = JSON.parse(fileContents); 

describe("API Tests", function() { 
    for (var i = 0; i < tests.length; i++) { 
     runTest(tests[i]); 
    } 
}); 
}); 

モカを実行する前にテストケースを含むファイルを読み込むにはどうすればよいですか?私はWebstormでMochaを使用しています。

+0

AFAIK 'describe'は' done'コールバックを渡すべきではありません。 – MarcoL

答えて

3

非同期バージョンが間違っている場合、doneコールバックをbeforeに渡す必要があります。そうしないと、フックは同期して実行されます。何かのように

before(function(done){ 
    fs.readFile('./json.txt', 'utf8', function(err, fileContents) { 
     if (err) throw err; 
     tests = JSON.parse(fileContents); 
     done(); 
    }); 
}); 
+1

これは解決策としてマークされていないのはなぜですか?これは私を助けた。ありがとう! –

+0

Thnx。 readFileを別の関数にラップすると、この関数はテストできません。私がこの機能を約束している場合のみ。 –

関連する問題