这是我的测试。我得到的错误是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
答案 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) }