FactoryGirl build_stubbed& RSpec - 生成ID但在测试Show操作时无法找到id

时间:2015-07-24 18:45:26

标签: ruby-on-rails ruby rspec factory-bot

这是我的测试。我得到的错误是ActiveRecord :: RecordNotFound:无法找到带有' id' = 1001的MedicalStudentProfile。我正确使用build_stubbed吗?

RSpec测试

RSpec.describe MedicalStudentProfilesController, type: :controller do

 let!(:profile){build_stubbed(:medical_student_profile)}
 let!(:user){build_stubbed(:user)}

 describe 'GET show' do

  it 'should show the requested object' do
   sign_in user
   get :show, id: profile.id
   expect(assigns(:profile)).to eq profile
 end
 end

end

控制器

def show
 @profile = MedicalStudentProfile.find params[:id]
end

2 个答案:

答案 0 :(得分:8)

build_stubbed不会将记录保存到数据库中,它只是将错误的ActiveRecord id分配给模型并存根数据库交互方法(如save),以便在调用它们时测试会引发异常。尝试使用:

let!(:profile){create(:medical_student_profile)}

答案 1 :(得分:3)

build_stubbed不会将记录保存到数据库中 - 它只是将模型存根以保持其持久性。这对于模型规范或您实际上没有与数据库交互的其他场景非常有用。

但是对于请求和控制器规范,您需要使用create,以便您的控制器可以从数据库加载记录。

let!(:profile){ create(:medical_student_profile) }
let!(:user){ create(:user) }