为什么factoryGirl在构建后不回滚并保存在rspec中

时间:2017-07-21 07:08:26

标签: ruby-on-rails rspec

我不明白为什么我的2规格记录不回滚: 我有2张桌子,县有很多医院

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

如果我运行它将显示错误“db = 10中存在id = 10” 谁能解释我错在哪里? 谢谢。

2 个答案:

答案 0 :(得分:0)

FactoryGirl不负责任。您有两个选择:

通常,模型测试将使用转换,数据库清理器用于无法在事务中操作的集成/验收测试,因为单独的进程(浏览器)需要读取测试中创建的数据。

答案 1 :(得分:0)

默认情况下,rspec不会为每个测试重置数据库。你需要配置它。是因为您的第二次测试正在下降,已经存在医院 id = 10

当你为第二次测试删除参数 id 并成功运行时, FactoryGirl 会自动生成 id < / strong>即可。

FactoryGirl中的方法构建不填充属性 id ,只有其他属性。是因为当您在构建方法之后调用保存时,FactoryGirll会生成 ID 并且您的测试成功通过