Ruby on rails FactoryGirl删除数据库中的所有用户
Hartl编写的Rails教程第二版 运行Ruby on rails FactoryGirl删除数据库中的所有用户,ruby-on-rails,pagination,factory-bot,railstutorial.org,Ruby On Rails,Pagination,Factory Bot,Railstutorial.org,Hartl编写的Rails教程第二版 运行rspec测试user\u pages\u spec中的pagination块时,rb正在删除开发数据库中的所有用户,而不仅仅是FactoryGirl创建的用户。当然,这会导致其他测试失败,因为数据库中不再有用户 用户\u页面\u spec.rb require 'spec_helper' describe "User pages" do subject { page } describe "index" do let(:user) { Fact
rspec
测试user\u pages\u spec中的pagination
块时,rb
正在删除开发数据库中的所有用户,而不仅仅是FactoryGirl
创建的用户。当然,这会导致其他测试失败,因为数据库中不再有用户
用户\u页面\u 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
你可以试试这个
30.times do
User.last.destroy
end
代替
User.delete_all
这将删除FactoryGirl创建的所有30个用户。但是,只有在您不在这两者之间创建更多用户的情况下,它才会起作用
更新
上面的代码只是一个黑客
若在测试应用程序访问开发数据库时,需要检查config/database.yml文件,以确保它不指向用于测试和开发的同一数据库。您也可以使用类似的方法。然后,您不需要手动删除用户,但对数据库的所有更改将自动恢复(在使用事务策略时)。您应该使用不同于用于开发的测试数据库。“before(:each)块在每个示例之前运行before(:all)块在组中的所有示例之前运行一次”-这解决了缺少用户的直接问题,但是书中的代码是错误的还是我的配置中的某些东西错误地让测试击中了开发数据库?请检查您的config/database.yml文件。您为测试指定了哪个数据库?database.yml与test and development具有相同的数据库。在将名称更改为测试数据库后,我运行了迁移,然后一切正常。谢谢@Bot。