2011-12-16 17 views
4

私の統合テストのためのIve setup capybara-webkitと非常に単純な問題に走っているIm。私のセッションは保存されていません。ユースケースはかなりシンプルですcapybara-webkit - レールセッションが保持されない/設定されない

 1. Login 
     2. Go to a specific page 
     3. Check if it has the approp content 

ステップ2では、私のアプリはテストケースをログインページに戻します。つまり、セッションが正しく設定されていません。

任意のヘルプは非常に

を高く評価され、私が代わりに@javascriptの@culerityを使用する場合は、このテストケースは、それほど問題はカピバラ-webkitのため

マイenv.rbカピバラ、WebKitの設定であるように思わ渡します 設定されているセッションのように見える:アップデート1

Spork.prefork do 
    require 'cucumber/rails' 
    require 'capybara' 
    require 'capybara/dsl' 
    require 'capybara/cucumber' 
    require 'capybara-webkit' 

    Capybara.run_server = false 
    Capybara.javascript_driver = :webkit 
    Capybara.default_selector = :css 


    # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In 
    # order to ease the transition to Capybara we set the default here. If you'd 
    # prefer to use XPath just remove this line and adjust any selectors in your 
    # steps to use the XPath syntax. 
    # Capybara.default_host = "127.0.0.1:3000" 

    Capybara.app_host = "http://localhost:3000" 
    end 

は、次のようにサポートがあります。私は

 puts(Capybara.current_session.driver.browser.get_cookies) 

私の手順でセッションをダンプするには、次のコードを使用して、私はfollwoingてしまった - ので、[ "_jqt_session = BAh7CEkiD3Nlc3Npb25faWQGOgZFRiIlYmMwYzNjYjY0MGU3NTg0OWFlNTcwODhmM2I2MzE1YmRJIhBfY3NyZl90b2tlbgY7AEZJIjEwRzN6NG1NTzZqamNCNC9FdWZWeXBCMHdoeThueXBnaTJDcTVzbmJqQlBZPQY7AEZJIgpmbGFzaAY7AEZJQzolQWN0aW9uRGlzcGF0Y2g6OkZsYXNoOjpGbGFzaEhhc2h7BjoKYWxlcnRJIh9JbnZhbGlkIGVtYWlsIG9yIHBhc3N3b3JkLgY7AFQGOgpAdXNlZG86CFNldAY6CkBoYXNoewY7B1Q%3D--クッキーが設定されているが、バック

送信されていないように見えます3fbe1c2a77a433228e7b7f2d8c8f0aec3ad5fb5f; HttpOnly; domain = localhost; path =/"]

更新2: は間違ったツリーを吠えていました。データベースクリーナー戦略がトランザクションに設定されているため、テストケースで作成していたユーザーがレールアプリに表示されていないようです。その後、アプリ カピバラのWebKitのか、セレンドライバが別のスレッドで実行されている、より多くの明快さを追加するには https://groups.google.com/forum/#!msg/ruby-capybara/JI6JrirL9gM/R6YiXj4gi_UJ

答えて

1

で詳細情報を参照してください、あなたは戦略とトランザクション備品やdatabase_cleanerを使用している場合:取引とあなたのデータがコミットされていません他のスレッドはそれを見ません。 可能な解決策は以下のとおりです。戦略と

  1. 使用database_cleaner:切り捨て。 (固いが遅い)
  2. すべてのスレッドに対して単一トランザクションを使用してアクティブなレコードを強制するコードを追加します。私は2番目のオプションを使用してい

    #Capybara use the same connection 
    class ActiveRecord::Base 
        mattr_accessor :shared_connection 
        @@shared_connection = nil 
    
        def self.connection 
        @@shared_connection || retrieve_connection 
        end 
    end 
    
    # Forces all threads to share the same connection. This works on 
    # Capybara because it starts the web server in a thread. 
    ActiveRecord::Base.shared_connection = ActiveRecord::Base.connection 
    

(速い、しかし、いくつかの問題を有していてもよく、例:after_commitフックが何のコミットがないように、と呼ばれていない)が、それは議論の余地があります。

関連する問題