2010-11-14 2 views
3

В рамках моих интеграционных тестов для веб-сайта я использую огурец с капибарой. Кажется, что capybara не может эмулировать использование файлов cookie.Печенье в тесте огурца с использованием capybara

Например, я установить куки, когда пользователь подписывает в:

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

Однако, когда я позже получить значение куки с помощью cookies.inspect возвращает {} Это известная ограничение водосвинки? Как я могу протестировать подписанного пользователя по нескольким запросам, если это так?

я должен добавить мой тест:

Scenario: User is signed in when they press Sign In 
Given I have an existing account with email "[email protected]" and password "123456" 
And I am on the signin page 
When I fill in "Email" with "[email protected]" 
And I fill in "Password" with "123456" 
And I press "Sign In" 
Then I should see "Welcome Bob Jones" 

ответ

2

здесь хороший способ показать содержание печенья во время работы вашей функции

https://gist.github.com/484787

+0

Очень приятно. Я не знаю, понадобится ли вам это, но если вы просто используете тест стойки, вы должны также установить любые заголовки. Capybara.current_session.driver.options || = {} Capybara.current_session.driver.options [: заголовки] || = {} Capybara.current_session.driver.options [: заголовки] [...] =. .. –

+0

Этот парень имеет gem-ified этот код. https://github.com/nruth/show_me_the_cookies –

1

Почему вы не просто запустить тест с селеном? Просто добавьте тег @selenium перед сценарием, который вы хотите запустить с помощью реального браузера. :)

+0

Я не ОП, но я знаю, что тесты должны быть как можно быстрее. Поэтому в любое время я могу избежать открытия браузера, тем лучше. –

0

У Capybara нет API для чтения и настройки файлов cookie.

Однако вы можете очень легко имитировать вход в систему с Capyabara - просто зайдите в ссылку для входа. Это позволит вам войти, включая настройку всех файлов cookie для вас.

Чтобы увидеть это в действии, просто взгляните на мой example Rails app.

1

что суть не работает для меня, как на дату этой публикации, однако это делает, и несколько проще:

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

+0

Эта страница на самом деле напортачила меня. Это сработало, но это испортило способность javascript моей страницы устанавливать файлы cookie. Мне пришлось удалить их код и найти другой способ. –

4

Вот шаг, который работает для меня. Он устанавливает cookie «admin_cta_choice» равным идентификатору модели, полученному из входного значения.

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 
Смежные вопросы