0

在 Hartl 的 Rails Tutorial 2nd Edition 中运行rspec测试时,该paginationuser_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
  ...

宝石文件

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
4

2 回答 2

1

你可以试试这个。

30.times do 
  User.last.destroy
end

代替

User.delete_all

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

更新

上面的代码只是一个 hack。

如果在测试应用程序访问开发数据库时,则需要检查 config/database.yml 文件以确保它没有指向相同的数据库进行测试和开发。

于 2013-08-17T21:03:16.943 回答
0

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

于 2013-08-17T21:07:50.160 回答