2016-11-23 3 views
0

In Controller Sie können unten durch den Code übergeben erstellen:Passing erstellen innerhalb der Methode rspec

expect { 
      post :create, params: {question: valid_attributes}, session: valid_session 
     }.to change(Question, :count).by(1) 

Was passiert, wenn das schaffen, ist im Inneren eines Verfahrens? Ich habe eine Methode, die sich find oder create verhält. Und es wird die id zurückgeben.

def my_method(id='') 
    if id.blank? 
    question = Question.create(content: "The content.") 
    else 
    question = Question.find(id) 
    end 

    question.id 
end 

ich tun, um die Rspec wie folgt aus:

it "should create for non existence of id" do 
    expect(my_method).to have(1).record 
end 

it "should return object base on id" do 
    expect(assigns(:question)).to eq(question) 
end 

Aber es gibt mir diese Fehlermeldung:

NoMethodError: 
     undefined method `have' for #<RSpec::ExampleGroups::ClassNameHere:0x00000008543a50> 

Kann jemand helfen? Vielen Dank!

+0

Wo wird diese 'my_method' platziert? und woher nennst du es? –

Antwort

1

Es gibt keine Magie. Statt:

expect(my_method).to have(1).record 

sollten Sie explizit die Methode aufrufen (ich nehme an, es ist eine Klassenmethode von Question) und dann Question Aufzeichnungen mit überprüfen. Methoden haben keine Datensätze aus offensichtlichen Gründen:

Question.my_method 
expect(Question).to have(1).record 
+0

Sie haben Recht. Vielen Dank! :) – borderline