2

Rails 3.1.0 Rspec 2Уплотненный вид ресурса спецификации, кажется, со ссылкой на несуществующий маршрут

В спецификации для просмотра вложенного ресурса, мне нужно, чтобы создать экземпляр/заглушки родительский ресурс, прежде чем я заглушить вложенный ресурс?

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

----- "./spec/views/sub_categories/edit.html.erb_spec.rb" - start -------- 


require 'spec_helper' describe "sub_categories/edit.html.erb" do before(:each) do 
    @sub_category = assign(:sub_category, stub_model(SubCategory, 
     :name => 'International interest rates', 
     :description => 'Comprehensive rates covering Australia, NZ, Malaysia and Singapore', 
     :category_id => 3, 
     :created_by => 1, 
     :updated_by => 1 
    )) end it "renders the edit sub category form" do 
    render 
    # Run the generator again with the --webrat flag if you want to use webrat matchers 
    assert_select "form", :action => category_sub_categories(@sub_category), :method => "post" do 
     assert_select "input#sub_category_name", :name => "sub_category[name]" 
     assert_select "textarea#sub_category_description", :name => "sub_category[description]" 
    end end end 
--- "./spec/views/sub_categories/edit.html.erb_spec.rb" - end -------- 

Вот выдержка из неудачи:.

----------- extract start ------------------------- 

    1) sub_categories/edit.html.erb renders the edit sub category form 
    Failure/Error: render 
    ActionView::Template::Error: 
     undefined method `sub_category_path' for #<#<Class: 0x0000010127d2b8>:0x000001016e2380> 
    # ./app/views/sub_categories/_form.html.erb:1:in `_app_views_sub_categories__form_html_erb__4092631658606598204_2155519360' 

    # ./app/views/sub_categories/edit.html.erb:3:in `_app_views_sub_categories_edit_html_erb___3853358586184509671_2155544160' 

    # ./spec/views/sub_categories/edit.html.erb_spec.rb:15:in `block (2 levels) in <top (required)>' 
----------- extract end ------------------------- 

Вот что мой образуют частичный вид как

----- app/views/sub_categories/_form.html.erb start --------------------- 

<%= form_for [@category, @sub_category] do |f| %> <% if @sub_category.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@sub_category.errors.count, "error") %> prohibited this sub_category from being saved:</h2> 
     <ul> 
     <% @sub_category.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> <% end %> <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> </div> <div class="field"> 
    <%= f.label :description %><br /> 
    <%= f.text_area :description %> </div> <div class="actions"> 
    <%= f.submit %> </div> <% end %> 

----- app/views/sub_categories/_form.html.erb end --------------------- 

Вот что я вижу, когда я бегу «рейк маршруты»:

------- routes start ---------------------------  category_sub_categories GET /categories/:category_id/ sub_categories(.:format) {:action=>"index", :controller=>"sub_categories"} 
          POST /categories/:category_id/ sub_categories(.:format) {:action=>"create", :controller=>"sub_categories"} new_category_sub_category GET /categories/:category_id/ sub_categories/new(.:format) {:action=>"new", :controller=>"sub_categories"} edit_category_sub_category GET /categories/:category_id/ sub_categories/:id/edit(.:format) {:action=>"edit", :controller=>"sub_categories"} 
    category_sub_category GET /categories/:category_id/ sub_categories/:id(.:format) {:action=>"show", :controller=>"sub_categories"} 
          PUT /categories/:category_id/ sub_categories/:id(.:format) {:action=>"update", :controller=>"sub_categories"} 
          DELETE /categories/:category_id/ sub_categories/:id(.:format) {:action=>"destroy", :controller=>"sub_categories"} 
       categories GET /categories(.:format) {:action=>"index", :controller=>"categories"} 
          POST /categories(.:format) {:action=>"create", :controller=>"categories"} 
       new_category GET /categories/ new(.:format) {:action=>"new", :controller=>"categories"} 
      edit_category GET /categories/:id/ edit(.:format) {:action=>"edit", :controller=>"categories"} 
        category GET /categories/:id(.:format) {:action=>"show", :controller=>"categories"} 
          PUT /categories/:id(.:format) {:action=>"update", :controller=>"categories"} 
          DELETE/categories/:id(.:format) {:action=>"destroy", :controller=>"categories"} 
         root  /
------- routes end --------------------------- 

Форма частичной был правильно установлен с родительским ресурсом и вложенным ресурсом (то есть. "form_for [@category, @sub_category]"). Кажется, что он вызывает маршрут, sub_category_path, который у меня есть , который никогда не указывался.

Ошибка возникает при создании формы редактирования/создания, где вызывается форма части .

Я очень озадачен, почему это происходит и консультировали результаты поиска, которые я имел с помощью Google для «вложенных ресурсов с RSpec», «Рельсы в действии 3» Иегуды Кац, и книги Rspec :(

Если кто-нибудь знает, что мне не хватает, я хотел бы услышать ваши мысли.

ответ

1

ваш category_id в @sub_category.category_id не @category, которые вы используете в представлении (что ноль в настоящее время).

[@category, @sub_category] является просто ярлык для url_for([@category, @sub_category]), который возвращает один путь ресурса, если один аргумент равен нулю.

Проверьте guide.

+0

спасибо за это, jibiel. Ты прав! Я изменил объект, который будет передан в путь category_sub_categories() с заглушенным объектом @category, и эта ошибка исчезнет. – Gordon

+0

К сожалению, еще одна ошибка всплыла. Сбой/Ошибка: не воздавал ActionView :: Template :: Ошибка: нет соответствующего маршрута {: контроллер => "sub_categories"} # ./app/views/sub_categories/edit.html.erb:6:in '_app_views_sub_categories_edit_html_erb___1129420093949643160_2199243480 ' # ./spec/views/sub_categories/edit.html.erb_spec.rb:21:in 'блок (2 уровня) в <сверху (обязательно)>' Я знаю, что мой контроллер определяется как "SubCategoriesController" в приложении/контроллерах/sub_categories_controller.rb. Я должен изучить это. Возможно, файл маршрутов.Будет сообщено позже :) спасибо :) – Gordon

+0

в вашем './Spec/views/sub_categories/edit.html.erb_spec.rb'. Короткий ответ: ** да **, вы должны заглушить родительский ресурс в этом случае. – jibiel

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