Не удается найти поле при использовании ссылки на символ - PullRequest
1 голос
/ 14 июля 2011

Я впервые играю с RoR и вижу странную ошибку.У меня есть следующий тестовый код для моих навигационных ссылок:

describe "when logged in" do 
  before(:each) do
    @user = Factory(:user)
    visit login_path

    #the line below is the weird one
    fill_in "session[user_name]", :with => @user.user_name

    fill_in :password, :with => @user.password
    click_button
  end

  it "should have navigation links" do
    response.should have_selector("nav")
  end

  it "should have link to log out" do
    response.should have_selector("a", :href => logout_path, :content => "Log out")      
  end  
end

приведенный выше код работает просто отлично, но если бы я изменил строку

fill_in "session[user_name]", :with => @user.user_name

на

fill_in :user_name, :with => @user.user_name

это не сработает, и я не могу понять, почему.Я получаю ошибку:

Failure/Error: fill_in :user_name, :with => @user.user_name
   Webrat::NotFoundError:
   Could not find field: :user_name

Соответствующий сгенерированный html:

<label for="session_user_name">User name</label><br/>
<input id="session_user_name" name="session[user_name]" size="30" type="text" />
<label for="session_password">Password</label><br/>
<input id="session_password" name="session[password]" size="30" type="password" />

Если вы посмотрите на код, который вы видите, я делаю именно это для пароля, и это прекрасно работает,Я хотел бы использовать синтаксис, который вызывает ошибку, поэтому я делаю что-то не так?

1 Ответ

2 голосов
/ 14 июля 2011

Попробуйте:

fill_in "user name", :with => @user.user_name

Я думаю, что вебрат хорош, и он может найти ваш ярлык «Пароль», потому что он нечувствителен к регистру и превращает :password в «Пароль».

Вы также можете использовать атрибут HTML id, т. Е.

fill_in :session_user_name, :with => @user.user_name

Здесь есть один вопрос: если вы подумываете о переходе на использование Capybara, а не Webrat: Capybara чувствительна к регистру, поэтомупроизойдет сбой на fill_in "user name".

Я не уверен, что здесь лучше, но я перешел на использование атрибутов HTML id и name вместо текста метки в моем собственном коде,Причина этого в том, что он менее хрупок, потому что люди меняют текст на сайте, обращенный к клиенту, больше, чем семантические элементы и имена.

...