我使用Capybara和Minitest來測試我的rails 4應用程序。我正在嘗試通過AJAX加載Google Map和colorbox。設置Javascript驅動程序後水豚::驅動::基本#evaluate_script錯誤
我們需要確保AJAX正在檢查某個元素之前加載,並試圖遵循本教程: https://robots.thoughtbot.com/automatically-wait-for-ajax-with-capybara
大多數教程都使用Rspec的,所以我將代碼放在test_helper.rb
:
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
include Warden::Test::Helpers
Warden.test_mode!
Capybara.default_max_wait_time = 5
Capybara.javascript_driver = :webkit
def wait_for_ajax
page.evaluate_script("jQuery.active") == 0
yield
end
end
通過其他人得到錯誤,看起來他們沒有安裝capybara-webkit
gem。但是,我們這樣做:
運行bundle install
:
...
Using capybara 2.5.0
Using capybara-webkit 1.7.1
這是我失敗的測試:
test "colorbox should appear on pageload" do
visit trips_new_path
wait_for_ajax do
assert_selector "#colorbox", "colorbox not created on trips/new"
end
end
而我收到的錯誤:
Capybara::NotSupportedByDriverError: Capybara::NotSupportedByDriverError: Capybara::Driver::Base#evaluate_script
test/test_helper.rb:35:in `wait_for_ajax'
test/integration/trip_creation_test.rb:17:in `block in <class:TripCreationTest>'
我已經嘗試在幾個不同的地方設置JavaScript,但它似乎仍然不工作。
更新:嘗試更多的語法和得到同樣的錯誤:
def wait_for_ajax
Capybara.javascript_driver = :webkit
Timeout.timeout(Capybara.default_wait_time) do
loop until finished_all_ajax_requests?
end
end
def finished_all_ajax_requests?
page.evaluate_script('jQuery.active').zero?
end
預先感謝您的幫助!
我覺得'page.evaluate_script(「jQuery.active」)== 0'語法有錯誤 – fabersky
謝謝你的回覆。我從教程中嘗試了一個額外的語法,但我仍然收到相同的錯誤。用新代碼更新我的問題。 – CHawk
嘗試改變你的測試從'測試'colorbox應該出現在頁面加載「做」到'描述「colorbox應該出現在頁面加載」,:js => true do' – fabersky