RSPEC / Капибара не обнаруживает поля

0

У меня проблемы с тестированием приложения Rails с capybara. Я пытаюсь проверить, что сообщение создается с определенным комментарием. Проблема в том, что Capybara не признает мои поля.

3) posts index page adding posts invalid post shows an error
     Failure/Error: click_button 'Create Post'
     Capybara::ElementNotFound:
       Unable to find button "Create Post"

4) Uploading photos displays image on post page
 Failure/Error: fill_in 'Description', with: 'My holiday pic'
 Capybara::ElementNotFound:
   Unable to find field "Description"

new.html.erb

<% if @post.errors.any? %>
  <div id="error_explanation">
    <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>

    <ul>
    <% @post.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  </div>
<% end %>

<%= form_for @post, :html => { :multipart => true } do |f| %>
  <%= f.label :description %>
  <%= f.text_area :description %>

  <%= f.label :picture %>
  <%= f.file_field :picture %>

  <%= f.submit %>
<% end %>

Исходный текст страницы

<p class="notice"></p>
<p class="alert"></p>

<div class="container">

<form accept-charset="UTF-8" action="/posts" class="new_post" enctype="multipart/form-data" id="new_post" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="authenticity_token" type="hidden" value="TpeVS+Z1c4x5V+TRRXuGWYP0oLYi7fIlEU8S6f1ugwg=" /></div>
  <label for="post_description">Description</label>
  <textarea id="post_description" name="post[description]">
</textarea>

  <label for="post_picture">Picture</label>
  <input id="post_picture" name="post[picture]" type="file" />

  <input name="commit" type="submit" value="Create Post" />
</form>
</div>

</body>
</html>

Спекуляции

require 'spec_helper'

describe 'posts index page' do
  context 'no posts' do
    it 'shows a message' do
      visit '/posts'
      expect(page).to have_content 'No posts yet'
    end
  end

  describe 'adding posts' do
    context 'valid post' do
      it 'is added to the posts page' do
        visit '/posts/new'
        fill_in 'Description', with: 'My holiday pic'

        expect(current_path).to eq '/posts'
        expect(page).to have_content 'My holiday pic'
      end
    end

    describe 'deleting a post' do
      it 'removes the post' do
        visit '/posts'
        click_link 'Delete'

        expect(page).not_to have_content 'My holiday pic'
      end
    end

    context 'invalid post' do
      it 'shows an error' do
        visit '/posts/new'
        click_button 'Create Post'

        expect(page).to have_content 'error'
      end
    end
  end
end

Я нашел аналогичное решение в соответствующем сообщении, в котором говорится указать id, например post_description в new.html.erb, но это не повлияло.

  • 1
    Я не вижу никаких спецификаций
  • 0
    Хорошая точка зрения! Добавлен.
Показать ещё 2 комментария
Теги:
rspec
capybara

1 ответ

0

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

В posts_controller.rb

def new
  authenticate_user!
  @post = Post.new
end

Как только тестовый пользователь был реализован с использованием Factory Girl gem, тесты прошли отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню