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

テストログとは何ですか? –

+0

@ Gawyn:これに対する解決策を見つけましたか?私も同じ問題を抱えています。 – Alan

答えて

4

あなたはいない考慮に入れる必要がありをそのAJAXコールをしようとしているRSpecがcapybaraです。 Railsは(それはJavaScriptを暗示しているため)だけでなくアウトオブボックス処理しないrack/testとカピバラUJSを、使用しているmethod: :putremote: trueことでやっていることも

、。 remote: trueを使用していなくても、method: :putだけを使用していた場合は、おそらくそれに当てはまります。私は賭け

あなたが起こることはありませんカピバラ-のWebKitを使用する場合:

# Gemfile 
gem 'capybara-webkit' 

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

をそれが動作する場合に、あなたの問題を与えているものrack/testです。それはjavascriptを扱うときにそれほど良くないからです。キュウリにはcapybara_javascript_emulationと呼ばれるものがありますが、テストをするときはそれに依存しません。

私のアプローチ:神のために、spinachを使用し、JavaScriptを必要とし、シンプルなもの:)また

にナイーブrack-testに頼るテストにドライバを切り替え! (またはturnip、少なくとも):D

+0

まずはお返事いただきありがとうございます!私はあなたのアプローチを試みてきましたが、役に立たない:それはまだ同じです。 :('カピバラ-webkit'または' selenity'? – Gawyn

+0

が真剣に?。私もセレンと試みたが、何も。 – josepjaume

+0

カピバラ、WebKitのではありません運を使用する場合でも – Gawyn

関連する問題