我正在使用Protrator / Jasmine编写测试,该测试应该迭代几百条记录。测试必须单击几个链接,并且在整个过程中都有一些browser.sleep
方法。总之,一次迭代测试大约需要10秒钟。
设置测试时,我有一个简单的数组循环:
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
。如果我在console.log(record)
方法中添加verifyRecord
,则所有记录ID几乎立即被转储到终端。
我也尝试将结果加载到本地数组中,然后迭代:
records = []
lineReader.on 'line', (line) ->
records.push line
for record in records
verifyRecord(record)
这也不起作用。
在使用列表中的下一条记录调用方法之前,如何让lineReader
等待每个verifyRecord
调用完成?
答案 0 :(得分:0)
您是否考虑过使用Mocha?
或者,您可以返回Promise,而不是使用done()
回调。如果您正在测试的API返回promises而不是回调,那么这很有用:
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);
});
});