在GOOS [1]中,他们使用一个名为assertEventually的断言进行采样 成功状态的系统,直到超过某个超时。这个 允许您使用异步代码同步测试。
我们已经在Ruby / RSpec世界中拥有相同的功能吗?一世 知道capybara有wait_until {},但这是相当简陋的 - 失败消息不是很有帮助。还有其他什么吗? 有?
答案 0 :(得分:2)
不确定。 “wait_for”是Brian Takita和我最初写的方法 用于Selenium测试,然后IIRC使它成为Selenium宝石和 现在很多图书馆使用它(或他们自己的版本 - 我没有专利 投票索赔:-))。我记得的wait_for允许你 自定义失败消息。让我去看看它是否在GitHub或 什么...
啊,这是一个: https://github.com/pivotal/selenium/blob/master/lib/selenium/wait_for.rb
答案 1 :(得分:0)
将此功能添加到代码
def wait_for
timeout = 3
start = Time.now
x = yield
until x
if Time.now - start > timeout
raise "Wait to long here. Timeout #{timeout} sec"
end
sleep(0.1)
x = yield
end
end
然后在每次需要等待异步时使用
client.check_mail
wait_for do
!client.envelope.nil?
end
expect(client.envelope.message['sender']).to eq 'Subzero'
通过异步调用填充数据的示例信封