Rails 5.2.0与RSpec 3.7.1中request spec替代assert_template方案咨询
在RSpec Request Spec中使用assert_template方法
我来帮你搞定这个问题~首先得明确,RSpec和Rails官方对新应用的建议确实是优先用request spec替代controller spec,而且不推荐主动引入rails-controller-testing gem。但如果你的场景真的需要在request spec里验证模板渲染,还是有办法实现的:
具体步骤:
添加gem依赖
先把rails-controller-testing加到测试环境的Gemfile里:group :test do gem 'rails-controller-testing' end然后跑一下
bundle install安装依赖。引入模板断言模块
打开你的RSpec配置文件(比如spec/rails_helper.rb,或者专门在spec/support下新建一个配置文件),给request spec类型的测试引入模板断言模块:RSpec.configure do |config| config.include Rails::Controller::Testing::TemplateAssertions, type: :request end在request spec里使用assert_template
现在就可以像在controller spec里一样用这个方法了,举个例子:RSpec.describe "Posts", type: :request do it "渲染index模板" do get posts_path assert_template :index end end
额外提醒:
- 其实request spec的设计初衷是测试完整的请求响应流程,更关注端到端的行为,而不是控制器内部渲染哪个模板。如果你的测试重点只是验证模板,官方其实更建议你换个思路——比如直接检查响应内容里有没有预期的文本,这样更贴合request spec的定位。
内容的提问来源于stack exchange,提问作者Fred Willmore
相关产品推荐
相关产品推荐

