RSpec控制器testing – 空白response.body

当用RSpectesting我的控制器时,我遇到了一个问题 – response.body调用总是返回一个空string。 在浏览器中一切正常呈现,黄瓜functiontesting似乎是正确的,但RSpec每次都失败。

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

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

至于版本,Rails 2.1.0,RSpec 1.2.7。

默认情况下,rspec-rails会隐藏到Rails中,以防止实际呈现视图模板。 您应该只testing您的操作的行为并过滤您的控制器testing,而不是模板渲染的结果 – 这是视图规范的目的。

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

 describe YourController do render_views ... end 

当我和一个类似的问题一起工作的时候,我想到了有不同的方法去涂抹同一只猫。 换句话说,不是检查正文,而是检查闪光灯的内容。

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

可能是一个等同的检查:

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

对我来说,后者看起来更灵活一点,因为它可以运行,但在所有情况下可能都不合适。

干杯,

约翰

RSpec 2+:如果你想检查端到端 – URL到响应主体 – 使用请求规范而不是控制器规范 。