2011-11-09 37 views
3

我在rspec的新,寫RSpec的測試爲View,有一個問題: 測試失敗,出現錯誤: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 

應用程序工作正常。但是,如果我刪除的routes.rb該行,然後在開發模式我收到同樣的錯誤:

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

所以我認爲它看起來像RSpec的視圖文件不知道我的路由,但我不確定。無論如何,我該如何解決這個問題?

回答

2

rspec視圖測試確實知道你的路線,所以imho別的是錯的。在看你的路線時,我看到一個參數:name

你不應該在某種程度上指定:name嗎?它似乎應該指向父母,不是嗎? 所以不太確定這是如何工作的。

看來你想要做類似

= form_for [@post, @comment] 

或明確構建URL。

+5

感謝您的回覆!問題與':name'參數完全相同。我已經爲參數分配了'post' mock-model,在'rspec'文件中添加了這一行:'controller.request.path_parameters [:name] = post.name',測試現在可以正常工作。 – evfwcqcg