Ruby on rails Rspec不执行AJAX调用

Ruby on rails Rspec不执行AJAX调用,ruby-on-rails,ajax,selenium,rspec,capybara,Ruby On Rails,Ajax,Selenium,Rspec,Capybara,我正在尝试使用ajax测试一个调用控制器操作的链接。本质上,当用户单击“Follow”时,他将与公司关联,并使用JS执行渲染部分。 问题是,当我在开发中尝试它时,它工作正常,但在测试中没有响应。我已经尝试了很多方法,但看起来这个电话从来没有打到控制器 在这里您可以看到测试: #spec/integration/following_spec.rb it "should add the company to the ones followed by the user", :js => tru

我正在尝试使用ajax测试一个调用控制器操作的链接。本质上,当用户单击“Follow”时,他将与公司关联,并使用JS执行渲染部分。 问题是,当我在开发中尝试它时,它工作正常,但在测试中没有响应。我已经尝试了很多方法,但看起来这个电话从来没有打到控制器

在这里您可以看到测试:

#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

您必须考虑的不是试图进行AJAX调用的RSpec,而是水豚

另外,Rails使用
方法::put
remote:true
所做的是使用UJS,而带有
机架/测试的capybara不能很好地处理开箱即用(因为它意味着javascript)。如果您甚至不使用
remote:true
,而只使用
method::put
,那么这可能也是正确的

我敢打赌,如果你使用水豚网络工具包,这不会发生:

# Gemfile
gem 'capybara-webkit'

# spec/integration_helper.rb
Capybara.default_driver = :webkit
如果这样做有效,是
rack/test
给您带来了问题。这是因为它在处理javascript时不是很好。在cucumber中有一种叫做
capybara\u javascript\u仿真的东西
,但在进行测试时我不会依赖它

我的方法是:在需要javascript的测试中切换驱动程序,并在更简单的测试中依赖朴素的
框架测试:)


还有,看在上帝的份上,用菠菜!(或者至少
turnip
):D

你必须考虑的不是试图做出AJAX调用的RSpec,而是水豚

另外,Rails使用
方法::put
remote:true
所做的是使用UJS,而带有
机架/测试的capybara不能很好地处理开箱即用(因为它意味着javascript)。如果您甚至不使用
remote:true
,而只使用
method::put
,那么这可能也是正确的

我敢打赌,如果你使用水豚网络工具包,这不会发生:

# Gemfile
gem 'capybara-webkit'

# spec/integration_helper.rb
Capybara.default_driver = :webkit
如果这样做有效,是
rack/test
给您带来了问题。这是因为它在处理javascript时不是很好。在cucumber中有一种叫做
capybara\u javascript\u仿真的东西
,但在进行测试时我不会依赖它

我的方法是:在需要javascript的测试中切换驱动程序,并在更简单的测试中依赖朴素的
框架测试:)


还有,看在上帝的份上,用菠菜!(或者至少是萝卜):首先,谢谢你的回答@josepjaume!我一直在尝试你的方法,但没有用:还是一样(说真的?即使使用
水豚网络工具包
硒含量
?水豚网络工具包也不走运。我也尝试过硒,但什么都没有。首先,谢谢你的回答@josepjaume!我一直在尝试你的方法,但没有用:还是一样的。)(说真的?即使在使用
capybara webkit
selenity
的时候?也没有用过capybara webkit。我也尝试过selenium,但没有用。@Gawyn:你找到解决方法了吗?我也有同样的问题。@Gawyn:你找到解决方法了吗。。