Ich schreibe einen Test mit Protrator/Jasmine, der über ein paar hundert Datensätze iterieren soll. Der Test muss auf mehrere Links klicken und es gibt ein paar browser.sleep
Methoden, die überall verstreut sind. Insgesamt dauert es ungefähr 10 Sekunden für eine Iteration des Tests.Wie kann ich Node auf den Abschluss einer Funktion warten lassen?
Wenn der Tests Einrichtung hatte ich ein einfaches Array in einer Schleife über:
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)
Das funktioniert ganz gut. Jeder verifyRecord
Aufruf tritt synchron auf und wird abgeschlossen, bevor der nächste ausgelöst wird. Aber die Liste der Datensätze ist lang und ändert sich, daher muss ich sie aus einer Textdatei ziehen, anstatt sie in meinem Skript zu codieren.
Wenn ich versuche, readline
zu verwenden, um Datensatz-IDs aus einer Datei zu ziehen und über sie zu iterieren, werden alle sofort an die veryifyRecord
-Funktion gesendet.
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)
Ich denke, dass Readline- Ergebnisse in verifyRecord
mit asynchron aufgerufen werden. Wenn ich innerhalb der verifyRecord
Methode eine console.log(record)
Methode hinzufüge, werden alle Datensatz-IDs fast sofort auf dem Terminal ausgegeben.
ich auch habe versucht, die Ergebnisse nach oben in ein lokales Array geladen und Iterieren, dass dann über:
Dies funktioniert auch nicht.
Wie kann ich die lineReader
warten, bis jeder Aufruf verifyRecord
vor dem Aufruf der Methode mit dem nächsten Datensatz in der Liste abgeschlossen?
Mögliche Duplikat [So warten Funktion vor continuning in Node.js zu beenden] (http://stackoverflow.com/questions/28849900/how-to-wait-für-Funktion-bis-vor-continuning-in-node-js) – fuzz