2012-04-27 83 views
1

我試圖測試使用AJAX調用控制器操作的鏈接。從本質上講,當用戶點擊「關注」,他將與該公司相關聯,並且渲染部分將與JS執行。 的問題是,它工作正常,當我嘗試在發展,但它並沒有在測試中作出迴應。我一直在嘗試很多方法,而且看起來這個調用永遠不會到達控制器。Rspec的不執行AJAX調用

在這裏,您可以看到測試:

#spec/integration/following_spec.rb 

it "should add the company to the ones followed by the user", :js => true do 
    find("#current_company").click_link "Follow" 
    sleep 2 
    @user.companies_followed.include?(@company).should be_true 
end 

的觀點:

#app/views/companies/_follow_button.html.slim 

= link_to change_follow_state_company_path(@company), :method => :put, :remote => true, :id => "follow", :class => "btn_block light" do 
' Follow 

而且測試配置:

#spec/integration_helper.rb 

require 'spec_helper' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'capybara/rspec' 
require 'capybara/rails' 

Dir[Rails.root.join("spec/integration/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    config.use_transactional_fixtures = true 

    config.before do 
    clear_email_queue 
    end 
end 

Rails.cache.clear 
+0

什麼是測試日誌? – 2012-04-27 11:48:46

+0

@Gawyn:你找到了解決方案嗎?我也有同樣的問題.. – Alan 2012-11-30 07:33:22

回答

4

你必須考慮到,不RSpec誰正在嘗試使AJAX呼叫,但水豚。

另外,Rails在做什麼method: :putremote: true正在使用UJS,其中rack/test水豚不能很好地處理(因爲它意味着JavaScript)。如果你不是即使使用remote: true但只有method: :put這大概也是真的。

我敢打賭,如果你使用的水豚,WebKit的不會發生的:

# Gemfile 
gem 'capybara-webkit' 

# spec/integration_helper.rb 
Capybara.default_driver = :webkit 

如果這樣的作品,是rack/test什麼給你的問題。這是因爲處理javascript時它不太好。在黃瓜有一些所謂的capybara_javascript_emulation但在做測試時,我不會依靠這一點。

我的做法:切換驅動程序上需要javascript和依靠天真rack-test上簡單的人:)

同樣的測試,使用spinach,看在上帝的份上! (或至少turnip):D

+0

首先,感謝您的回答@josepjaume!我一直在嘗試你的方法,但無濟於事:它仍然是一樣的。 :( – Gawyn 2012-04-27 10:59:27

+0

嚴重嗎?即使使用capybara-webkit或selenity? – josepjaume 2012-04-27 11:01:46

+0

沒有運氣與水豚-webkit。我也嘗試過硒,但沒有。 – Gawyn 2012-04-27 11:10:47