2015-07-24 6 views
5

Ecco il mio test. L'errore che sto ottenendo è ActiveRecord :: RecordNotFound: Impossibile trovare MedicalStudentProfile con 'id' = 1001. Sto usando build_stubbed correttamente?FactoryGirl build_stubbed & RSpec - Genera ID ma non riesce a trovare l'ID durante il test Mostra azione

RSpec prova

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 

controller

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

risposta

6

build_stubbed non salva il record al database, assegna semplicemente un falso ActiveRecord id al modello e mozziconi fuori di database metodi di interazione (come salvataggio) tali che il test solleva un'eccezione se vengono chiamati. Prova con:

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

+1

Grazie. Ho controllato in build_stubbed per accelerare i test del controller, ma sembra non essere applicabile qui. –

+0

È possibile simulare o arrestare il metodo di ricerca della classe MedicalStudentProfile per evitare l'hit del database. In questo modo si utilizzano i mock per specificare il comportamento del controller anziché prevedere un risultato del database. Consiglio vivamente le [Rails 4 Test Prescriptions] (http://www.amazon.com/Rails-Test-Prescriptions-Healthy-Codebase/dp/1941222196/ref=sr_1_1?s=books&ie=UTF8&qid=1437766269&sr=1- 1 & keywords = rails + 4 + test + prescrizioni) prenota se vuoi saperne di più. – izaban

+0

Ho capito quanto il DB sia utile per le prestazioni del test, ma non è questo tipo di sconfitta lo scopo di un test di integrazione? – max

2

build_stubbed non salva il record al database - è Stub semplicemente un modello di agire come è stato persistito. Questo è ottimo per le specifiche del modello o altri scenari in cui non si sta effettivamente interagendo con il database.

Ma per le specifiche della richiesta e del controller è necessario utilizzare create in modo che i controllori possano caricare i record dal database.

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

Grazie! Non ero sicuro di poterli usare per le specifiche del controller. –