質問

ウェブサイトの統合テストの一環として、Capybaraでキュウリを使用しています。 CapybaraはCookieの使用をエミュレートできないようです。

たとえば、ユーザーがサインインしたらクッキーを設定します。

    def sign_in(user)
      cookies.permanent.signed[:remember_token] = [user.id, user.salt]
      current_user = user
    end

ただし、後でCookieを使用してCookieの値を取得すると、{}を返します。これはCapybaraの既知の制限ですか?これが当てはまる場合、複数のリクエストで署名されたユーザーをテストするにはどうすればよいですか?

テストを追加する必要があります:

Scenario: User is signed in when they press Sign In
 Given I have an existing account with email "bob@jones.com" and password "123456"
 And I am on the signin page
 When I fill in "Email" with "bob@jones.com"
 And I fill in "Password" with "123456"
 And I press "Sign In"
 Then I should see "Welcome Bob Jones"
役に立ちましたか?

解決

機能を実行しながらクッキーのコンテンツを表示する良い方法があります

https://gist.github.com/484787

他のヒント

これが私のために働くステップです。 Cookie「Admin_Cta_Choice」を入力値から派生したモデルIDに等しく設定します。

Given /I have selected CTA "([^"]+)"/ do |cta_name|
  cta = Cta.find_by_name(cta_name)
  raise "no cta with name '#{cta_name}'" if cta.nil?

  k = "admin_cta_choice"
  v = cta.id

  case Capybara.current_session.driver
  when Capybara::Poltergeist::Driver
    page.driver.set_cookie(k,v)
  when Capybara::RackTest::Driver
    headers = {}
    Rack::Utils.set_cookie_header!(headers,k,v)
    cookie_string = headers['Set-Cookie']
    Capybara.current_session.driver.browser.set_cookie(cookie_string)
  when Capybara::Selenium::Driver
    page.driver.browser.manage.add_cookie(:name=>k, :value=>v)
  else
    raise "no cookie-setter implemented for driver #{Capybara.current_session.driver.class.name}"
  end
end

セレンでテストを実行してみませんか?実際のブラウザで実行するシナリオの前に、@seleniumタグを追加するだけです。 :)

この要点は、この投稿の日付の時点では機能しませんでしたが、これはやや単純です。

http://collectiveidea.com/blog/archives/2012/01/05/capybara-cucumber-and-how-the-cookie-crumbles/

Capybaraには、Cookieを読み取り、設定するためのAPIがありません。

ただし、Capyabaraでログインすることを非常に簡単にシミュレートできます。ログインリンクにアクセスしてください。あなたのためにすべてのクッキーを設定するなど、それはあなたにログインします。

これを実行しているのを見るには、私を見てください レールアプリの例.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top