2013-08-17 48 views
0

所有用戶在Rails教程第2版由哈特爾 當運行rspec測試中user_pages_spec.rbpagination塊被刪除所有用戶在開發數據庫,​​而不是僅僅通過FactoryGirl創建的用戶。當然這會導致其他測試失敗,現在數據庫中沒有用戶了。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

您應該使用與您用於開發的不同的測試數據庫。 –

+0

「之前(:每個)塊在每個示例之前運行(:全部)塊在組中的所有示例之前運行一次」 - https://www.relishapp.com/rspec/rspec-core/v/ 2-0/docs/hooks/before-and-after-hooks – j03w

回答

1

你可以試試這個。

30.times do 
    User.last.destroy 
end 

在地方的

User.delete_all 

這會刪除FactoryGirl創建的所有30個用戶。但只有當你不在兩者之間創造更多的用戶時纔有效。

更新

上面的代碼只是一個黑客。

如果在測試應用程序正在打開開發數據庫時,則需要檢查config/database.yml文件以確保它不指向同一個db進行測試和開發。

+0

解決了缺少用戶的直接問題,但是來自圖書的代碼錯誤或者是錯誤地讓我的配置中的某些內容碰到了開發數據庫? – JanuskaE

+1

請檢查你的config/database.yml文件。你指定了哪個數據庫進行測試? – Bot

+0

database.yml與測試和開發具有相同的數據庫。在將名稱更改爲測試數據庫後,我運行了一次遷移,然後一切正常。謝謝@Bot。 – JanuskaE

0

您還可以使用類似Database Cleaner之類的東西。然後,您不需要手動刪除用戶,但所有對數據庫的更改都會自動恢復(使用事務策略時)。