是否可以检查get
是否请求呈现文本?
我知道有像response.body == 'any string'
这样的黑客但我不感兴趣。我只是想知道是否有“RSpec™”的方法来做到这一点。
有了这个rspec:
RSpec.describe MyController, type: :controller do
controller do
def index
render text: 'Hellow'
end
end
describe 'rendering' do
subject { get :index }
it { is_expected.to render_template(text: 'Hellow')}
end
end
我希望能够致电it { is_expected.to render_template(text: 'Hellow')}
。它提出了:
Failure/Error: it { is_expected.to render_template(text: 'Hellow') }
ArgumentError:
Unknown key: :text. Valid keys are: :layout, :partial, :locals, :count, :file
或者it { is_expected.to render_template('Hellow')}
Failure/Error: it { is_expected.to render_template('Hellow') }
expecting <"Hellow"> but rendering with <[]>
是否有任何RSpec™方法可以实现它?
答案 0 :(得分:2)
测试expect(response.body).to eq('Hellow')
是完全合适的。
is_expected.to render_template
不起作用的原因是您没有渲染模板。如果您的控制器省略了明确的render
调用,Rails会为您呈现index
模板,您可以测试render_template(:index)
。如果您想渲染非标准模板,也可以render template: :foo
然后测试render_template(:foo)
。但是当你render text: 'Hellow'
时,你并没有使用模板;您已明确将响应正文设置为您指定的文本。
如果你确实渲染了一个模板,并且想要测试该模板渲染的内容,那么render_views
开始时就是gotva mentioned。即使这样,您也可以检查response.body
中的内容,正如您在RSpec自己的示例中所看到的那样。由于您的模板变得复杂,控制器规格并不适合这个,您应该开始使用assert_select
或类似内容编写view specs。