私は数百のレコードを繰り返し処理するはずの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
コールが完了するのを待機してから、リスト内の次のレコードのメソッドを呼び出すことはできますか?
可能な複製(http://stackoverflow.com/questions [関数は、Node.jsの中continuning前に終了するのを待つ方法]/28849900/node-jsで継続する前に機能を完了するまでの待ち時間) – fuzz