Last active
August 29, 2015 14:01
-
-
Save macu/1f0a31590c43065f8ff7 to your computer and use it in GitHub Desktop.
Helpers for testing Ember applications using Cucumber and Watir
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding: UTF-8 | |
module PatientlyHelper | |
def patiently(seconds=5, &block) | |
start_time = Time.now | |
begin | |
block.call | |
rescue Exception => e | |
raise e if (Time.now - start_time) >= seconds | |
sleep(0.05) | |
retry | |
end | |
end | |
end | |
World PatientlyHelper | |
# Thanks to http://trianglegrrl.github.io/ember-cucumber-pres/#/ | |
# for the examples | |
module EmberHelpers | |
def add_ajax_listeners | |
@browser.execute_script %Q{ | |
// Monitor pending AJAX requests for testing. | |
// ajaxStart is triggered on new requests when none are pending. | |
$(document).ajaxStart(function() { | |
$('body').addClass('ajax-pending').removeClass('ajax-quiet'); | |
}); | |
// ajaxStop is triggered when all pending requests are done. | |
$(document).ajaxStop(function() { | |
$('body').addClass('ajax-quiet').removeClass('ajax-pending'); | |
}); | |
} | |
end | |
def expect_dependencies | |
throw 'No jQuery' if @browser.execute_script "return !$" | |
throw 'No Ember' if @browser.execute_script "return !Ember" | |
end | |
def detect_ember_app | |
return @browser.execute_script "return $('body').hasClass('ember-application')" | |
end | |
def wait_for_ember_application_to_load | |
patiently do | |
expect_dependencies | |
throw 'No Ember application' unless detect_ember_app | |
end | |
end | |
def wait_for_ember_run_loop_to_complete | |
return unless detect_ember_app | |
patiently do | |
expect_dependencies | |
throw 'AJAX pending' if @browser.execute_script "return $('body').hasClass('ajax-pending')" | |
throw 'No pause in Ember run loop' unless @browser.execute_script "return !Ember.run.currentRunLoop" | |
end | |
end | |
end | |
World EmberHelpers | |
# Annotate scenarios with this | |
AfterStep('@patiently-for-ember') do | |
wait_for_ember_run_loop_to_complete | |
end | |
# Assert this after loading an Ember app | |
Then(/^I should be in an Ember app$/) do | |
wait_for_ember_application_to_load | |
add_ajax_listeners | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment