Rspec / Capybara没有在我渲染的部分中找到内容

时间:2013-12-28 01:40:36

标签: ruby-on-rails ruby rspec capybara haml

我有views/board_games/index.html.haml

的代码
.row
    %ul
        = render @board_games

这是我的views/board_games/_board_games.html.haml

%li
    %a{href: board_game_path(board_game.id) }
    %h5.text-center
        %strong
            = board_game.name
    %img.image-center{ src: board_game.image_url }

在我的规格中我有

require 'spec_helper'

describe "Board Game Pages" do

  subject { page }

  describe "Index page" do
    let(:bg1) { FactoryGirl.create(:board_game) }
    let(:bg2) { FactoryGirl.create(:board_game) }

    before { visit board_games_path }

    it { should have_content(bg1.name) }
    it { should have_content(bg2.name) }
  end
end

即使我可以在实际页面上看到内容,此测试也无法通过。我已经确定它不遵循= render @board_games。如何让capybara / rspec找到那里的内容。

2 个答案:

答案 0 :(得分:1)

原因是let

let很懒。在你打电话之前它不会做任何事情。在您的情况下,您实际上在期望中调用了let定义的方法。那时,let为你创建了记录,但是在渲染视图时已经很晚了,所以没有要显示的记录。

解决方法是使用let!代替let,如果你想在db中保留一些内容。

let!(:bg1) { FactoryGirl.create(:board_game) }

答案 1 :(得分:0)

你可能没有在那里使用Capybara。您可能正在使用“模拟服务器”模式,其中RSpec仅遵循路由并执行与真实Web服务器相同的服务器端操作。

(如果你是,你不应该,因为没有高级JS Capybara是浪费时间。)

如果您确实不使用Capybara,请启用render_views,这样RSpec就不会删除实际的模板渲染步骤。