Rspec 异步行为的断言

Rspec 异步行为的断言,rspec,Rspec,在GOOS[1]中,他们使用了一个名为assertEventually的断言,该断言对 系统将处于成功状态,直到某个超时时间过去。这 允许您使用异步代码同步测试 在Ruby/RSpec世界中,我们已经有了与之相当的功能了吗?我 我知道水豚要等到{},但那是相当初级的——水豚 失败消息没有多大帮助。还有别的东西吗 在那里 [1] 当然可以。“等待”是Brian Takita和我最初为之编写的一种方法 用于硒测试,然后IIRC将其制成硒宝石 现在很多图书馆都使用它(或者他们自己的版本——我没有专利)

在GOOS[1]中,他们使用了一个名为assertEventually的断言,该断言对 系统将处于成功状态,直到某个超时时间过去。这 允许您使用异步代码同步测试

在Ruby/RSpec世界中,我们已经有了与之相当的功能了吗?我 我知道水豚要等到{},但那是相当初级的——水豚 失败消息没有多大帮助。还有别的东西吗 在那里

[1] 当然可以。“等待”是Brian Takita和我最初为之编写的一种方法 用于硒测试,然后IIRC将其制成硒宝石 现在很多图书馆都使用它(或者他们自己的版本——我没有专利) 投票时的索赔:-))。我记得的等待让你 自定义失败消息。让我去看看是在GitHub还是 任何事

啊,这里有一个:
将此函数添加到代码中

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'
在示例中,通过异步调用填充数据的信封