In GOOS[1] they use an assertion called assertEventually which samples
the system for a success state until a certain timeout has elapsed. This
allows you to synchronise the tests with asynchronous code.
Do we have an equivalent of that in the Ruby / RSpec world already? I
know capybara has wait_until { } but that’s fairly rudimentary – the
failure message isn’t very helpful. Is there anything else already out
there?
Sure. “wait_for” is a method Brian Takita and I originally wrote for
use in Selenium tests, then IIRC it made it into the Selenium gem and
now lots of libraries use it (or their own version — I make no patent
claim on polling :-)). The wait_for I remember allowed you to
customize the failure message. Let me go see if it’s on GitHub or
anything…
Ah, here’s one:
https://github.com/pivotal/selenium/blob/master/lib/selenium/wait_for.rb