9

機能する次の rspec テストがあります。

  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

しかし、私は Factory girl を使用しているので、手動で s を作成する必要はありませんapi_key

上記の機能を複製するにはどうすればよいですか?

使用:

  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

また:

  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

:api_keyコントローラーに到達すると、値に null 値が返されます。

参考までに、このテストでテストしている作成アクションを次に示します。

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
4

2 に答える 2

27

試す:

post :create, :api_key => FactoryGirl.attributes_for(:api_key)
于 2013-02-26T16:00:20.593 に答える
1

を使用buildしても、実際にはレコードは作成されません。やったふりをするだけです。を使用attributes_forすると、オブジェクトの属性が得られます。これは主に、説明したコンテキストで使用されます。これオブジェクトを作成しないことに注意してください。

応答が成功/リダイレクトされた場合、私はこれを行います:

 response.should be_redirect

または、さらに良い使用はexpectです。

于 2013-02-26T16:38:16.377 に答える