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
答案 0 :(得分:1)
你可以试试这个。
30.times do
User.last.destroy
end
取代
User.delete_all
这将删除FactoryGirl创建的所有30个用户。但只有当你不在两者之间创造更多用户时才会起作用。
<强>更新强>
上面的代码只是一个黑客。
如果测试应用程序遇到开发数据库,则需要检查config / database.yml文件以确保它不指向同一个数据库以进行测试和开发。
答案 1 :(得分:0)
您还可以使用Database Cleaner之类的内容。然后您不需要手动删除用户,但会自动恢复对数据库的所有更改(使用事务策略时)。