2012-04-27 84 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