我是rspec的新手,为View
编写了rspec-test并且出现了问题:
测试失败并出现错误:
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-view-file不知道我的路由,但我不确定。无论如何,我该如何解决这个问题?
答案 0 :(得分:2)
rspec视图测试确实知道你的路线,所以imho还有别的错误。查看路线时,我会看到参数:name
。
你不应该以某种方式指定:name
吗?好像它应该指向父帖,不是吗?
所以不太确定这是如何工作的。
似乎你想要做像
这样的事情= form_for [@post, @comment]
或明确构建网址。