2015-12-04 2 views
0

У меня возникают трудности получения тест пройти:RSpec ActiveRecord :: RecordNotFound

Ошибка:

Failure/Error: post :create, { appointment: { dentist_id: '1', patient_id: '2', appt_date: '2015-12-05 09:00:00' } } 
ActiveRecord::RecordNotFound: 
    Couldn't find Dentist with 'id'= 

Назначение Контроллер:

def create 
@dentist = Dentist.find(params[:dentist_id]) 
@appointment = @dentist.appointments.new(appointment) 
    if Appointment.exists?(:appt_date => @appointment.appt_date) 
    render :new 
    else 
    @appointment.save 
    redirect_to dentist_path(@dentist) 
    end 
end 

Назначение Spec:

describe 'POST #create' do 
it 'assigns a newly created appointment as @appointment' do 
    post :create, { appointment: { dentist_id: '1', patient_id: '2', appt_date: '2015-12-05 09:00:00' } } 
    expect(assigns(:appointment)).to be_a(Appointment) 
    expect(assigns(:appointment)).to be_persisted 
end 
end 

Что мне не хватает? Любая помощь будет оценена по достоинству.

ответ

1

В запросе, вы делаете post :create, { appointment: { dentist_id: '1', ... } }, что означает, что params[:dentist_id] в контроллере будет nil (обратите внимание, как вы вложенности dentist_id под appointment в вашем запросе Params). Чтобы исправить это, измените @dentist = Dentist.find(params[:dentist_id]) в действии вашего контроллера на @dentist = Dentist.find(params[:appointment][:dentist_id]) или измените ваш запрос на post :create, { dentist_id: '1', appointment: { patient_id: '2' ... } }.

Update

Вам также необходимо создать Dentist запись в базе данных до того, как тест запускается. Чтобы сделать это, добавить что-то подобное для вашего теста:

describe 'POST #create' do 
    before { Dentist.create!(id: 1) } 

    it 'assigns a newly created appointment as @appointment' do 
    post :create, { dentist_id: '1', appointment: { patient_id: '2', appt_date: '2015-12-05 09:00:00' } } 
    ... 
    end 
end 
+0

Я попытался свое решение, и теперь появляется следующее сообщение об ошибке: Сбой/Ошибка: сообщение: создание, {dentist_id: «16», назначение: {patient_id : '2', appt_date: '2015-12-05 09:00:00'}} ActiveRecord :: RecordNotFound: Не удалось найти стоматолога с 'id' = 16 –

+0

ну у вас есть дантист с ID 16 в ваша тестовая база данных? – sevenseacat

+0

Это, вероятно, потому, что запись 'Dentist' с идентификатором' 16' не существует. Обновлен мой ответ, чтобы включить инструкции для создания записи «Dentist» до запуска вашего теста. – theunraveler

Смежные вопросы