2013-02-26 6 views
9

Ich habe folgende rspec Test, das funktioniert:Wie kann man mit FactoryGirl Parameter senden (im Gegensatz zum manuellen Senden der Parameter als Hash)?

it "redirects to the created api_key" do 
    post :create, :api_key => {:api_identifier => "asdfadsf", :verification_code => 
     "12345"} 
    response.should redirect_to(ApiKey.last) #(or any other test function) 
    end 

Aber ich benutze Fabrik Mädchen so ich nicht manuell api_key s erstellen müssen.

Wie kann ich die obige Funktionalität replizieren, aber Fabrikmädchen verwenden?

Verwendung:

it "redirects to the created api_key" do 
    test = FactoryGirl.build(:api_key) 
    post :create, :api_key => test 
    response.should redirect_to(ApiKey.last) #(or any other test function) 
    end 

oder:

it "redirects to the created api_key" do 
    post :create, FactoryGirl.build(:api_key) 
    response.should redirect_to(ApiKey.last) #(or any other test function) 
    end 

Gibt mir Nullwerte für den :api_key Wert, wenn ich an meinem Controller ankommen.

Als Referenz hier ist meine Aktion erstellen, dass dieser Test Test ist:

def create 
    @api_key = ApiKey.new(params[:api_key]) 
    @api_key.user = current_user 
    pp @api_key 

    respond_to do |format| 
    if @api_key.save 
     format.html { redirect_to @api_key, notice: 'Api key was successfully created.' } 
     format.json { render json: @api_key, status: :created, location: @api_key } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @api_key.errors, status: :unprocessable_entity } 
    end 
    end 
end 

Antwort

25

Versuch:

post :create, :api_key => FactoryGirl.attributes_for(:api_key) 
+0

Sie haben meinen Tag gemacht! Danke vielmals !! – Hito

1

build Verwendung nicht wirklich einen Datensatz erstellen. Es gibt nur vor, es getan zu haben. Mit attributes_for erhalten Sie die Attribute eines Objekts. Dies wird meistens in dem Kontext verwendet, den Sie beschreiben. Beachten Sie, dass diese zu kein Objekt erstellen wird.

Was ich tun würde, ist dies, wenn die Antwort erfolgreich ist/umleiten:

response.should be_redirect 

Oder noch besser expect verwenden.

Verwandte Themen