2

给定以下简单规范:

require 'spec_helper'

feature 'Feeds', %q{
  In order see the latest content of Buurtlink
  As a user
  I should be able to view a neighborhood or postal_code
} do

  background do
    @neighborhood = FactoryGirl.create(:neighborhood_with_posts)
  end

  scenario 'Visitor views a neighborhood' do
    visit neighborhood_path(@neighborhood)

    find('#header_title').should have_content 'Diemen-Zuid'

    10.times do |index|
      expect(page).to have_text "Title of new post #{index}"
    end
  end

end

此测试随机失败。页面上没有使用 JS,但 Capybara 似乎在 FactoryGirl 完成创建所有必要的帖子之前访问了neighbor_path。使用 save_and_open_page 查看页面时,我可以看到有时尚未创建所有帖子。

只需在 visit neighbor_path 上方添加 sleep 1 即可解决问题,但这不是解决方案。

我正在使用 RSpec、Capybara、Spork 和 DatabaseCleaner。我还对 ActiveRecord 进行了猴子修补,以便它使用共享连接。

4

2 回答 2

1

试试这个而不是你的背景块:

let!(:neighborhood){FactoryGirl.create(:neighborhood_with_posts)}

你可以做

 visit neighborhood_path(neighborhood)
于 2013-08-15T15:07:46.243 回答
0

这是在 ApplicationController 中:

def load_posts_after_current_time
  session[:load_posts_after] = DateTime.now unless params[:page].present?
end

因此,在获取新创建的记录时会发生错误。因此将 created_at 1.hour.ago 添加到后工厂。

  factory :post do
    user { FactoryGirl.create(:user) }
    created_at 1.hour.ago

    factory :neighborhood_post do
      association :postable, factory: :_neighborhood_post
    end
  end

有用!

于 2013-08-15T15:18:27.280 回答