我使用RSpec来测试我的观点。我想测试edit
操作的视图是否包含字段(或文本)" Director"。它在render
上窒息。这是我的代码:
# spec/views/movies/edit.html.haml_spec.rb
require 'spec_helper'
describe 'movies/edit.html.haml' do
it 'displays \'director\' field on edit page' do
render
expect(rendered).to have_content("Director")
end
end
运行此操作时出现以下错误:
Failure/Error: render
ActionView::Template::Error:
No route matches {:action=>"show", :controller=>"movies", :id=>nil}
我的理解是约定优于配置意味着没有任何参数的render
应该呈现预期的视图app/views/movies/edit.html.haml
我不知道它为什么要寻找行动路线show
。该路线确实存在,但它与此规范无关。
我已经尝试了render
的许多论据,没有运气:
render :edit
render action: :edit # is this even valid?
render :action => :edit
render "edit"
render "edit.html.haml"
render action: "edit"
render action: "edit.html.haml"
render :action => "edit"
render :action => "edit.html.haml"
以上所有产生两个错误之一:
ArgumentError:
You invoked render but did not give any of :partial, :template, :inline, :file or :text option.
OR
ActionView::MissingTemplate:
Missing partial /edit, movies/edit with {:locale=>[:en], :formats=>[:html, :text, :js, :css, :ics, :csv, :png, :jpeg, :gif, :bmp, :tiff, :mpeg, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json, :pdf, :zip], :handlers=>[:erb, :builder, :coffee, :haml]}.
我没有尝试渲染局部,我试图渲染完整视图。我是否错误地使用了约定,或者错误地使用render
?
编辑1 :我不会认为它是偏袒的。 app/views/movies/edit.html.haml
有一个视图。我可能无法正确理解偏见是什么。
Edit2 :我为new
操作尝试了相同的规范,它似乎运行良好(文本不存在时失败,文本存在时传递)。这是否意味着我需要将edit
视图加载为部分视图,还是需要为@movie
提供虚拟数据?为什么edit
是部分的?
答案 0 :(得分:0)
对于寻找类似内容的其他人,您应该为要渲染的视图指定电影模型。
以下内容应该有效:
describe 'movies/edit.html.haml' do
let(:movie) { Movie.create(movie_params_go_here) }
it 'displays \'director\' field on edit page' do
assign(:movie, movie)
render
expect(rendered).to have_content("Director")
end
end