FactoryGirl删除数据库中的所有用户

时间:2013-08-17 20:46:28

标签: ruby-on-rails pagination factory-bot railstutorial.org

Hartl的Rails教程第2版 运行rspec测试时,pagination中的user_pages_spec.rb阻止正在删除开发数据库中的所有用户,而不仅仅是FactoryGirl创建的用户。当然,由于数据库中不再有用户,这会导致其他测试失败。

user_pages_spec.rb

require 'spec_helper'

describe "User pages" do

subject { page }

describe "index" do

let(:user) { FactoryGirl.create(:user) }

before(:each) do
  sign_in user
  visit users_path
end

it { should have_title('All users') }
it { should have_content('All users') }

describe "pagination" do
  before(:all) { 30.times { FactoryGirl.create(:user) } }
  after(:all)  { User.delete_all }

  it { should have_selector('div.pagination') }

  it "should list each user" do
    User.paginate(page: 1).each do |user|
      expect(page).to have_selector('li', text: user.name)
    end
  ...

的Gemfile

source 'https://rubygems.org'
ruby '1.9.3'

gem 'rails', '4.0.0'
gem 'bootstrap-sass', '2.3.2.0'
gem 'bcrypt-ruby', '3.0.1'
gem 'faker', '1.1.2'
gem 'will_paginate', '3.0.4'
gem 'bootstrap-will_paginate', '0.0.9'
gem 'pg', '0.15.1'
gem 'activeresource', '4.0.0'

group :development, :test do
  gem 'rspec-rails', '2.13.1'
  gem 'annotate',  '~> 2.5.0'
end

group :test do
  gem 'selenium-webdriver', '2.0.0'
  gem 'capybara', '2.1.0'
  gem 'factory_girl_rails', '4.2.0'
end

gem 'sass-rails', '4.0.0'
gem 'uglifier', '2.1.1'
gem 'coffee-rails', '4.0.0'
gem 'jquery-rails', '2.2.1'
gem 'turbolinks', '1.1.1'
gem 'jbuilder', '1.0.2'

group :doc do
  gem 'sdoc', '0.3.20', require: false
end

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor'
end

2 个答案:

答案 0 :(得分:1)

你可以试试这个。

30.times do 
  User.last.destroy
end

取代

User.delete_all

这将删除FactoryGirl创建的所有30个用户。但只有当你不在两者之间创造更多用户时才会起作用。

<强>更新

上面的代码只是一个黑客。

如果测试应用程序遇到开发数据库,​​则需要检查config / database.yml文件以确保它不指向同一个数据库以进行测试和开发。

答案 1 :(得分:0)

您还可以使用Database Cleaner之类的内容。然后您不需要手动删除用户,但会自动恢复对数据库的所有更改(使用事务策略时)。