Capybara + RSpec只能看到控制器规格中的空白页面.为什么?

Eva*_*lsh 6 ruby tdd rspec ruby-on-rails capybara

我正在尝试为简单的控制器编写控制器规范.但是,Capybara没有看到任何页面内容.但是,在我的浏览器中查看网站的页面工作得很好.我究竟做错了什么?

谢谢!

我的控制器规格

我的spec_helper.rb

我的Gemfile

Pau*_*ell 14

您需要明确告诉控制器规范您希望它呈现视图以使其工作.将您的规范更新为如下所示:

require 'spec_helper'

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

  before do
    @post = Fabricate :post
  end

  # ...
end
Run Code Online (Sandbox Code Playgroud)

这在rspec的自述文件中有所描述.有关更详细的视图,请参阅"render_views"的 rspec-rails'黄瓜功能.

这只是提醒一句.有这样的原因,这不是默认行为:

  • 可以说,你通过与控制器同时测试视图来混合两个问题.Ryan Bigg(见评论)表明你的测试可能更好地被认为是集成测试,它通常生活在spec/integration而不是spec/controller.
  • 渲染视图可能会大大减慢测试的执行速度.

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

希望有所帮助.

  • 我建议OP不要使用控制器测试,而是在`spec/integration`中为这些测试创建新的测试.控制器测试test*single*动作,集成测试整个堆栈. (3认同)
  • Capybara惯例是将这些放入规格/要求中,不是吗?为什么规格/整合呢? (2认同)