Интеграционное тестирование Rails 3 - Использование webrat fill_in без поиска полей - PullRequest
5 голосов
/ 16 марта 2011

Я сейчас изучаю тестирование, но у меня есть некоторые проблемы с Вебратом, который не находит поля формы с помощью fill_in, хотя я убедился, что он находится на правильной странице. Работает ли в Webrat имена полей или идентификаторы? Я пытался использовать символы Ruby и имена форм для доступа к полю, но ни один из них не работает в моем случае. Вы видите что-то неправильное в моей реализации?

Сообщение об ошибке:

5) Forwarding should forward the user to the requested page after signin
   Failure/Error: integration_sign_in(user)
   Could not find field: :email

Тестовый код:

it "should forward the user to the requested page after signin" do
  user = Factory(:user)
  visit edit_user_path(user)

  # The test automatically follows the redirect to the signin page
  puts current_url
  integration_sign_in(user)

  # The test follows the redirect again, this time to users/edit
  response.should render_template('users/edit')
end

где integration_sign_in в spec_helper.rb

def integration_sign_in(user) 
  fill_in :email,   :with => user.email 
  fill_in :password, :with => user.password 
  click_button
end

Поле формы HTML:

<form action='/sessions' class='mtm' id='sign-in-form' method='post'> 
    <input name='authenticity_token' type='hidden' value='iIIqT6bUwiJkpqpgxm5sjAj3egrNcEgeXPsYmbKQ02U='> 
        <div class='landingSignInForm'> 
          <label class='mas signin-label' for='email'>E-mail:</label> 
          <input class="mls ras" id="email" name="email" placeholder="e-mail address" type="text" /> 
          <label class='mas signin-label' for='password'>Password:</label> 
          <input class="mls ras" id="password" name="password" placeholder="password" type="password" /> 
          <input checked='checked' class='mls mtm' name='remember' type='checkbox' value='permanent'> 
          <span class='remember-me-label'>Keep me signed in</span> 
          <input class='mls mvm ram medium silver button' name='submit' type='submit' value='Sign in'> 
          <a class='forgot-password' href='#'>Forget your password?</a> 
        </div> 
</form> 

Ответы [ 2 ]

1 голос
/ 11 апреля 2011

Должно работать либо с

fill_in 'email', :with => user.email    # field name

, либо с

fill_in 'E-mail', :with => user.email   # partial label text

Подробнее см. В документации webrat .

ТакжеЯ заметил, что некоторые из ваших полей ввода не закрыты.Это именно тот HTML, который генерирует ваш шаблон?

В общем, я бы порекомендовал перейти на Capybara, но я сомневаюсь, что webrat на самом деле не работает.

1 голос
/ 16 марта 2011

Вы пытались использовать селектор css для идентификатора вместо простой передачи соответствующего символа?Я попытался кратко прочитать источник webrat, чтобы определить, обрабатывает ли он символы как строки внутри, задаваясь вопросом, является ли это вашей проблемой.Я не могу найти примеры синтаксиса webrat, используя только fill_in :symbol fill_in 'string'

Попробуйте:

def integration_sign_in(user) 
  fill_in 'email',   :with => user.email 
  fill_in 'password', :with => user.password 
  click_button
end

или маршрут селектора css для ваших идентификаторов:

def integration_sign_in(user) 
  fill_in '#email',   :with => user.email 
  fill_in '#password', :with => user.password 
  click_button
end
...