2011-11-09 9 views
3
私はRSpecの中に新たなんだ

ViewためにRSpecのテストを書き、私のルートについて知っていないとの問題があります:RSpecのビューファイルは

Failure/Error: render 
ActionView::Template::Error: 
    No route matches {:controller=>"comments", :action=>"create", :format=>nil} 

モデルの関係は単純です: テストがエラーで失敗します:

post has_many :comments 
comment belongs_to :post 

ビューファイル:

# app/views/posts/show.html.haml 

#postform 
    = form_for @comment do |f| 
    = f.text_field :name 
    = f.submit "Reply" 

RSpecのファイル:

# spec/views/posts/show.html.haml_spec.rb 
require 'spec_helper' 

describe 'posts/show.html.haml' do 
    it 'renders the form for a new comment creation' do 
    assign(:post, mock_model(Post).as_new_record.as_null_object) 
    assign(:comment, mock_model(Comment).as_new_record.as_null_object) 
    render 
    end 
end 

routes.rbを

post '/:name/comments' => 'comments#create', :as => :comments 

アプリケーションは正常に動作します。

No route matches {:controller=>"comments", :action=>"create", :format=>nil} 

は、だから私はそれが私のルーティングについて知らないRSpecのビューファイルのように見えると思うが、私は:私はroutes.rbをからその行を削除した場合でも、その後、開発モードで私は同じエラーを取得しますわからない。とにかく、どうすれば問題を解決できますか?

答えて

2

rspecビューのテストではルートを知っているので、他の何かが間違っています。あなたのルートを見ると、パラメータ:nameが表示されます。

どういうわけか:nameを指定してはいけませんか?それは親のポストを指すべきであるように思える、ない? これがどのように機能するかはかなりわかりません。

あなたが

= form_for [@post, @comment] 

または明示的にURLを構築するようなものをやっているにしたいようです。

+5

返信いただきありがとうございます!問題は ':name'パラメータとまったく同じでした。私は、 'rspec'ファイルに' controller.request.path_parameters [:name] = post.name'という行を追加して、 'post'模擬モデルにパラメータを割り当てました。 – evfwcqcg