2016-05-19 6 views
0

私は数百のレコードを繰り返し処理するはずのProtector/Jasmineでテストを書いています。テストはいくつかのリンクをクリックしなければならず、いくつかのメソッドが全体に振りかざされています。テストを1回繰り返しても、すべて一緒に約10秒かかります。Nodeが関数の完了を待つようにするにはどうすればよいですか?

私は上のループへの単純な配列を持っていたテストのセットアップ:これは正常に動作します

verifyRecord = (record) -> 
    ... 
    element(`by`.id('generalSearch').sendKeys(record) 
    element(`by`.id('submit').click() 
    browser.sleep 3000 
    ... 
    expect(result).toBe(true) 

records = [ 
    'RCD-001' 
    'RCD-002' 
    'RCD-003' 
] 

describe 'The crucial records', -> 

    beforeEach -> 
     browser.ignoreSynchronization = true 

    it 'should be accessible to the user', -> 
     browser.get '/path/to/form' 
     for record in records 
      verifyRecord(record) 

を。各verifyRecordコールは同期して発生し、次のコールが開始される前に完了します。しかし、レコードのリストは長くて変化するので、スクリプトでハードコーディングするのではなく、テキストファイルから取り込む必要があります。

readlineを使用してファイルからレコードIDを取得し、それらのファイルを反復処理しようとすると、すべてがすぐにveryifyRecord関数に送信されます。

fs = require 'fs' 
readline = require 'readline' 

verifyRecord = ... 

describe 'The crucial records', -> 

    beforeEach -> 
     browser.ignoreSynchronization = true 

    it 'should be accessible to the user', -> 
     browser.get '/path/to/form' 

     lineReader = readline.createInterface({ 
      input: fs.createReadStream 'records.txt' 
     }) 

     lineReader.on 'line', (line) -> 
      verifyRecord(line) 

readlineを使用すると、verifyRecordが非同期に呼び出されることになります。 verifyRecordメソッドの中にconsole.log(record)を追加すると、すべてのレコードIDがほとんど即座に端末にダンプされます。

私はまた、地元の配列にアップ結果をロードし、その上で反復処理しようとしました:

これはどちらか動作しません。

lineReaderは、verifyRecordコールが完了するのを待機してから、リスト内の次のレコードのメソッドを呼び出すことはできますか?

+0

可能な複製(http://stackoverflow.com/questions [関数は、Node.jsの中continuning前に終了するのを待つ方法]/28849900/node-jsで継続する前に機能を完了するまでの待ち時間) – fuzz

答えて

0

Mochaをご覧になりましたか?

また、done()コールバックを使用する代わりに、プロミスを返すことがあります。あなたはリターンをテストしているAPIは代わりに取ってコールバックを約束している場合に便利です:

beforeEach(function() { 
    return db.clear() 
    .then(function() { 
     return db.save([tobi, loki, jane]); 
    }); 
}); 

describe('#find()', function() { 
    it('respond with matching records', function() { 
    return db.find({ type: 'User' }).should.eventually.have.length(3); 
    }); 
}); 
関連する問題