Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails FactoryGirl删除数据库中的所有用户_Ruby On Rails_Pagination_Factory Bot_Railstutorial.org - Fatal编程技术网

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

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

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) { 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。