You may be asking yourself why you’d want to do this in the first place. Well here’s why I would want to do it.
We had some Webdriver based Cucumber tests that passed fine locally but kept failing on our CI box. Our CI box is a bit underpowered at the moment so I thought what might be happening is that our tests weren’t waiting long enough for the Ajaxy stuff to happen because the Ajax responses were taking a long time.
After some poking around in the source code of jQuery, I found the $.active property. This property keeps track of the number of active Ajax requests that are going on and I thought this might help us out.
What I came up with was this gist:
I added this step right after my Cucumber step that caused the Ajax call so that Cucumber would wait to move on until I knew that everything was done.
This step solved our CI failures and all was good in our test suite again.
Thanks, Mike, great tip. I was just implementing similar logic in my async jasmine tests. This works great for that as well.
May 3, 2011 at 7:51 pm
Not sure if you’re using capybara, but the post was categorized as such…anyway capybara does/will do this for you.
https://github.com/jnicklas/capybara/commit/021b87f6ba512f9903b209178c584def45d62e7f
May 4, 2011 at 5:30 am
@Darrin…good to know. Yes I am using Capybara but it didn’t seem to do the trick without this step. I’ll experiment a little bit and see if I can figure out why.
May 5, 2011 at 6:20 pm