2011-05-09 75 views
6

我想写一个简单的控制器的控制器规范。但是,Capybara没有看到任何网页内容。不过,在浏览器中查看网站的页面效果还不错。我究竟做错了什么?水豚+ RSpec只能看到控制器规格中的空白页。为什么?

T. Hanks!

My controller spec

My spec_helper.rb

My Gemfile

+0

您是否尝试过没有Spork?这可能会导致问题。 – 2011-05-09 05:00:24

+0

删除Spork似乎并没有改变任何东西。 – 2011-05-09 05:20:46

回答

14

你需要明确地告诉您希望它渲染视图为了这个工作,你的控制器规范。更新您的规格看起来像这样:

require 'spec_helper' 

describe PostsController do 
    render_views # Render this controller's views during spec execution. 

    before do 
    @post = Fabricate :post 
    end 

    # ... 
end 

这在RSpec中的readme描述。有关更详细的视图,请参阅rspec-rails'cucumber feature for 'render_views'

只需要谨慎一句。这是不是默认行为的原因:

  • 可以说,你通过与控制器同时测试视图来混合两个问题。 Ryan Bigg(见评论)建议您的测试可能更好地考虑为集成测试,通常住在spec/integration而不是spec/controller
  • 渲染视图可能会显着减慢测试的执行速度。

...不是说你不应该这样做,只是说你应该清楚为什么你是

希望有所帮助。

+3

我会建议OP不使用控制器测试,而是在'spec/integration'中为这些测试创建新的测试。控制器测试*单个*动作,集成测试整个堆栈。 – 2011-05-09 05:39:07

+0

同意 - 因此我对混合关注的评论。不过,你表达得比我更好。我会将你的评论纳入答案。 – 2011-05-09 09:02:08

+0

也发布了黄瓜生成的文档:http://relishapp.com/rspec/rspec-rails/dir/controller-specs/render-views,http://relishapp.com/rspec/rspec-rails/dir/ controller-specs/views-are-stubbed-default- – 2011-05-09 10:44:47