ruby on rails - RSpec控制器测试 - 空白response.body

使用RSpec测试我的控制器时遇到问题 - response.body调用总是返回一个空字符串。 在浏览器中,一切都正确呈现,黄瓜特征测试似乎正确,但RSpec每次都失败。

对响应对象的其他期望,如response.should render_template('index')传递没有任何问题。

有没有人遇到过这个问题? 也许响应html可以通过其他方式获得?

至于版本,Rails 2.1.0,RSpec 1.2.7。

Toms Mikoss asked 2019-08-10T14:18:56Z
4个解决方案
176 votes

默认情况下,rspec-rails攻击Rails以防止它实际呈现视图模板。 你应该只测试你的行为和行为的行为。 过滤您的控制器测试,而不是模板渲染的结果 - 这是视图规范的用途。

但是,如果您希望将控制器规格渲染模板设置为应用程序通常的模板,请使用render_views指令:

describe YourController do
  render_views
  ...
end
mislav answered 2019-08-10T14:19:18Z
3 votes

RSpec 2+:如果要检查端到端 - url到响应正文 - 请使用请求规范而不是控制器规范。

Thomas answered 2019-08-10T14:19:43Z
2 votes

当我处理一个类似的问题(这导致我提出这个问题)时,我突然想到有不同的方法可以为同一只猫做皮肤。 换句话说,您可以检查闪存的内容,而不是检查正文。

response.body.should =~ /Invalid email or password/

可能是一个等效的检查:

flash[:alert].should == "Invalid email or password"

对我而言,后者似乎更灵活,因为它将以任何一种方式运行,但在所有情况下可能都不合适。

干杯,

约翰

John Lockwood answered 2019-08-10T14:20:28Z
1 votes

默认情况下,RSpec-rails配置禁用渲染控制器规范的模板

解决此问题的方法之一是确保在rails_helper.rb文件中启用render_views设置。 通过这种方式,您可以在所有测试中全局工作。

RSpec.configure do |config|
  config.render_views
end

或者使用render_views声明单个组:

describe User do
  render_views
end

你可以在这里阅读更多相关信息。

Nesha Zoric answered 2019-08-10T14:21:21Z
translate from https://stackoverflow.com:/questions/1063073/rspec-controller-testing-blank-response-body