Rspec的不执行AJAX调用
我试图测试使用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
你必须考虑到,不RSpec谁正在尝试使AJAX呼叫,但水豚。
另外,Rails在做什么method: :put
和remote: 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
首先,感谢您的回答@josepjaume!我一直在尝试你的方法,但无济于事:它仍然是一样的。 :( – Gawyn 2012-04-27 10:59:27
严重吗?即使使用capybara-webkit或selenity? – josepjaume 2012-04-27 11:01:46
没有运气与水豚-webkit。我也尝试过硒,但没有。 – Gawyn 2012-04-27 11:10:47
什么是测试日志? – 2012-04-27 11:48:46
@Gawyn:你找到了解决方案吗?我也有同样的问题.. – Alan 2012-11-30 07:33:22