2017-07-21 65 views
0

我不明白爲什麼我在2規格記錄不回滾: 我有2個表,縣內的has_many醫院爲什麼factoryGirl生成後不回滾並保存在rspec的

require "rails_helper" 

RSpec.describe Hospital, type: :model, focus: true do 

context "created along with new hospital created" do 

    it "should create new hospital" do 
     @prefecture = FactoryGirl.create(:prefecture) 
     hospital = FactoryGirl.build(:hospital, id: 10, prefecture: @prefecture) 
     expect { hospital.save }.to change { Hospital.count }.by 1 
    end 

    it "should save" do 
     @prefecture = FactoryGirl.create(:prefecture) 
     hospital = FactoryGirl.build(:hospital, id: 10, prefecture: @prefecture) 
     hospital.save 
    end 
end 

end 

如果我運行將顯示錯誤「id = 10存在於db」 任何人都可以解釋我錯在哪裏? 謝謝。

+1

在你的'spec_helper.rb'中,你有'config.use_transactional_fixtures = true'嗎? – Hoa

+0

@Hoa不,我試圖使用該命令,但它顯示我錯誤。如果我在醫院建築中刪除「id:10」,那麼它會通過,但我不知道爲什麼。 – Hung

+0

沒有這種配置,所有測試中都會重複使用相同的數據。這就是爲什麼在第二次測試中無法保存id = 10的另一家醫院,因爲您已經從第一次測試中創建了一個。如果你刪除了id = 10,當然這是有效的,因爲現在你有兩家醫院有不同的ID(沒有ID衝突)。添加配置時出現什麼錯誤? – Hoa

回答

0

這不是FactoryGirl的責任。你有兩個選擇:

通常你的模型測試將使用transctions和數據庫吸塵器用於集成/驗收測試,因爲單獨的進程(瀏覽器)需要讀取測試中創建的數據,所以不能在事務內運行。

+0

我想知道爲什麼我的測試用例沒有通過。據我所知,每個測試規格將回滾,但在我的情況下,它不是回滾。如果我在醫院建築中刪除「id:10」,那麼它會通過。 – Hung

0

默認情況下,rspec不會爲每個測試重置您的數據庫。你需要配置它。是因爲你的第二次測試正在下降,已經存在醫院id = 10

當你刪除參數ID第二次測試,併成功運行,FactoryGirl將自動生成一個新的 ID

修建從FactoryGirl的方法將不填屬性ID,屬性只是休息。是因爲當你以後構建方法調用保存,則FactoryGirll產生ID和你的測試順利通過。

相關問題