добавление граватарии - PullRequest
1 голос
/ 28 июня 2011

У меня есть проблема, когда я пытаюсь добавить граватарное изображение в свой код из книги 7 примеров из книги «Изучить по примерам». сайт показывает нормально, но я не могу пройти тест спецификации rspec, я получаю следующие ошибки:

1) UsersController должен иметь правильное название Ошибка / Ошибка: get: show,: id => @user ActionController :: RoutingError: Не найдено ни одного маршрута {: id => nil,: controller => "users",: action => "show"} # ./spec/controllers/users_controller_spec.rb:36:in `блок (2 уровня) в '

2) UsersController должен включать имя пользователя Ошибка / Ошибка: get: show,: id => @user ActionController :: RoutingError: Не найдено ни одного маршрута {: id => nil,: controller => "users",: action => "show"} # ./spec/controllers/users_controller_spec.rb:41:in `блок (2 уровня) в '

3) UsersController должен иметь изображение профиля Ошибка / Ошибка: get: show,: id => @user ActionController :: RoutingError: Не найдено ни одного маршрута {: id => nil,: controller => "users",: action => "show"} # ./spec/controllers/users_controller_spec.rb:46:in `блок (2 уровня) в '

4) UsersController GET 'show' должен быть успешным Ошибка / Ошибка: get: show,: id => @user ActionView :: Template :: Ошибка: неопределенный метод gravatar_image_tag' for #<#<Class:0x00000003dda0d8>:0x00000003dd31c0> # ./app/helpers/users_helper.rb:4:in gravatar_for ' # ./app/views/users/show.html.erb:7:in _app_views_users_show_html_erb___2751740854697998587_32401380__1353884467646085556' # ./spec/controllers/users_controller_spec.rb:13:in блок (3 уровня) в '

5) UsersController GET 'show' должен найти нужного пользователя Ошибка / Ошибка: get: show,: id => @user ActionView :: Template :: Ошибка: неопределенный метод gravatar_image_tag' for #<#<Class:0x00000003dda0d8>:0x00000002c7e140> # ./app/helpers/users_helper.rb:4:in gravatar_for ' # ./app/views/users/show.html.erb:7:in _app_views_users_show_html_erb___2751740854697998587_32401380__1353884467646085556' # ./spec/controllers/users_controller_spec.rb:18:in блок (3 уровня) в '

Чтобы дать вам немного фона, я случайно добавил граватарный камень в неправильную область, но я изменил его обратно на правильную область

спецификация / контроллеры / users_controller_spec.rb

it "should have the right title" do
get :show, :id => @user
response.should have_selector("title", :content => @user.name)
end

it "should include the user's name" do
get :show, :id => @user
response.should have_selectori("h1", :content => @user.name)
end

it "should have a profile image" do
get :show, :id => @user
response.should have_selector("h1>img", :class => "gravatar")
end
end

приложение / контроллеры / Users_controller.rb

class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@title = @user.name
end

приложение / хелперы / users_helper.rb

module UsersHelper

def gravatar_for(user, options = { :size => 50 })
gravatar_image_tag(user.email.downcase, :alt => user.name,
                :class => 'gravatar',
                :gravatar => options)
end
end

приложение / просмотров / пользователей / show.html.erb

<%= @user.name %>, <%=  @user.email %>

<table class="profile" summary="Profile Information">
<tr>
<td class="main">
<h1>
<%= gravatar_for @user %>
<%= @user.name %>
</h1>
</td>
<td class="sidebar round">
<strong>Name</strong> <%= @user.name %><br />
<strong>URL</strong> <%= link_to user_path(@user), @user %>
</td>
</tr>
</table>

Ответы [ 3 ]

1 голос
/ 31 июля 2011

Для тех, у кого такая же ошибка: убедитесь, что в файле users_controller_spec.rb строчки:

      before(:each) do
        @user = Factory(:user)
      end

размещены сразу после render_views , иначе пользователь не будет создан для каждого метода.

0 голосов
/ 02 декабря 2011

Ваши ошибки ясно показывают, что :id => nil - это не то, что ожидается для маршрута :action => :show.

Это часто случается в спецификациях, когда вы неправильно настроили @user ... Могу поспорить, если вы изменили одну из своих спецификаций на это:

it "should have the right title" do
  @user.id.should_not be_blank
  get :show, :id => @user
  response.should have_selector("title", :content => @user.name)
end

То, что он потерпит неудачу в самой первой строке - говоря что-то вроде «ноль, как ожидается, не будет пустым».

Способ решить эту проблему - убедиться, что @user правильно инициализируется с пользователем.

Как указал @ user861181, это можно сделать в блоке before(:each), настроив заводские настройки. В качестве альтернативы (если вы используете приборы), вы можете использовать:

  before(:each) do
    @user = users(:one)
  end
0 голосов
/ 28 июня 2011

: id => nil, возможно, пользователь не авторизован?и вам нужно проверить это с помощью <% if current_user%>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...