2013-05-08 3 views
0

Я в процессе преобразования моей аутентификации пользователя с нуля в драгоценный камень разработки. Все завершено и работает нормально. Я изменил свои тесты rspec, но у меня есть одна повторяющаяся проблема, которую я искал, чтобы найти решение.конвертировать в devise - capybara :: ElementNotFound:

Ошибка

2) AuthenticationPages authorization for non-signed-in users when attempting to visit a protected page after signing in should render the desired protected page 
    Failure/Error: fill_in :email, with: user.email 
    Capybara::ElementNotFound: 
     cannot fill in, no text field, text area or password field with id, name, or label  'email' found 
    # (eval):2:in `fill_in' 
    # ./spec/requests/authentication_pages_spec.rb:53:in `block (5 levels) in <top (required)>' 

Тест

describe "for non-signed-in users" do 
    let(:user) { FactoryGirl.create(:user)} 

    describe "when attempting to visit a protected page" do 
     before do 
      visit edit_user_registration_path(user) 

      fill_in "Email", with: user.email 
      fill_in "Password", with: user.password 
      click_button "Sign in" 
     end 

     describe "after signing in" do 
      it "should render the desired protected page" do 
       page.should have_selector('title', text: 'Edit user') 
      end 
     end 
    end 

Разрабатывают форма (new_user_session - появляется, прежде чем допустить, чтобы увидеть информацию редактировать пользователя)

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <%= f.label :email %> 
    <%= f.email_field :email, :autofocus => true %> 

    <%= f.label :password %> 
    <%= f.password_field :password %> 

    <% if devise_mapping.rememberable? -%> 
    <%= f.check_box :remember_me %> <%= f.label :remember_me %> 
    <% end -%> 

    <%= f.submit "Sign in", class: "btn btn-large btn-primary" %> 
<% end %> 
<%= render "devise/shared/links" %> 

Поведение действительно работает правильно при тестировании в браузере, но тест rspec не работает.

ответ

0

Capybara не может найти вход для электронной почты; поскольку форма кажется правильно построенной, скорее всего, Capybara перенаправляется на другую страницу, прежде чем добираться до формы.

Вы уверены, что путь к форме - edit_user_registration_path(user), а не, например, new_user_registration_path или (даже лучше, если вы тестируете sign_in, а не sign_up) new_user_session_path?

+0

Хорошо, что тест предназначен для пользователя, который в настоящее время не зарегистрирован, чтобы попробовать его изменить. Он не должен допускать этого, и вместо этого имеет знак в форме (который является формой, которую я приложил - new_user_session). После того, как пользователь создает новый сеанс, они затем перенаправляются в форму редактирования, изначально планируемую для нее. Затем тест должен проверить, что после того, как в представлении в представлении появится «Редактировать пользователя». Я не могу заставить capybara подписать пользователя, прежде чем увидеть форму редактирования. –

+0

Извините @SeanL, я понимаю поток, вы правы. Можете ли вы проверить, на какой странице прибывает Capybara? Шаг 'visit edit_user_registration_path (user)' проходит, поэтому он прибывает куда-то. – Galen

+0

Я очень озадачен тем, куда идет капибара. Я попробовал комментирование из fill_in (информация о пользователе), чтобы нажать кнопку - и изменил нижнюю часть теста, чтобы увидеть, должна ли страница иметь h1, текст: «Войти». Он не сказал, что он не отображается. Net Net Я понятия не имею, куда уходит capybara. На данный момент я собираюсь отказаться и прокомментировать тест, если у вас нет других предложений. Спасибо –

Смежные вопросы