2017-12-22 5 views
0

Ich kann nicht herausfinden, warum Stub in dieser Quelle nicht erstellen kann. Ich versuche, die Logik in If-Anweisung zu testen. if user.nil? || company.nil? ist die Bedingung. Zu diesem Zweck habe ich die Spezifikationsdefinition wie folgt gemacht.Wie stosse ich in RSpec?

def introduce 
    accountant_request = AccountantRequest.with_introduce_request_status(:requested).find(params[:id]) 

    company = Company.find_by(id: accountant_request.company_id) 
    user = User.find_by(id: company.try(:primary_user_id)) 
    if user.nil? || company.nil? 
     redirect_to admin_accountant_requests_path, alert: 'There is no company or user' and return 
    end 

Hier ist die Spezifikation. Meine Erwartung ist Company.find_by (...) gibt nil zurück.

shared_examples 'post #introduce' do 
    subject(:response) { post 'introduce', params_for_introduce } 

    context 'error by user.nil? || company.nil?' do 
     it 'fail' do 
     allow_any_instance_of(Company).to receive(:find_by).and_return(nil) 
     expect(response).to have_http_status 302 
     expect(response).to redirect_to introduce_error_redirect_path2 
     end 
    end 

Leider company = Company.find_by(id: accountant_request.company_id) kehrt vorhandenen Datensatz nicht gleich Null. Also konnte ich nicht nach innen schauen, ob Aussage.

Was ist los? Und was soll ich in diesem Fall tun? Jede Idee ist willkommen.

Antwort

1

allow_any_instance_of sollte für eine Instanz der Gesellschaft Klasse, aber hier find_by auf die Klasse selbst

Versuchen Sie, diese aufgerufen werden (vor der Testperson also die Anforderung ausgeführt wird):

allow(Company).to receive(:find_by) { nil } 
+0

Danke für den Kommentar. Ich verstehe es. Ich werde diese Änderung nächste Woche anwenden und Ihnen das Ergebnis mitteilen. –

+0

@Samy_Kacimi Ich habe getan, was Sie gelehrt haben. Aber ein Fehler verursacht wie '#

+0

Ich habe das Problem behoben, indem ich einen Stub für den Benutzer erstellt habe. Danke dem Rat. Es ist fertig –