2

請求書モデル (クライアントには多くの請求書があり、請求書はクライアントに属しています) をテストしており、create メソッドが機能するかどうかを確認しようとしています。

これは私が思いついたものです:

before do
  @valid_invoice = FactoryGirl.create(:invoice)
  @valid_client = @valid_invoice.client
end

it "creates a new Invoice" do
    expect {
      post :create, { invoice: @valid_client.invoices.build(valid_attributes), client_id: @valid_client.to_param }
    }.to change(Invoice, :count).by(1)
  end

これは私の請求書工場です:

FactoryGirl.define do
    factory :invoice do
        association :client
        gross_amount 3.14
        net_amount 3.14
        number "MyString"
        payment_on "2013-01-01"
        vat_rate 0.19
    end
end

これは、invoices_controller の create メソッドです。

def create
@client = Client.find(params[:client_id])
@invoice = @client.invoices.build(params[:invoice])

respond_to do |format|
  if @invoice.save
    format.html { redirect_to([@invoice.client, @invoice], :notice => 'Invoice was successfully created.') }
    format.json { render :json => @invoice, :status => :created, :location => [@invoice.client, @invoice] }
  else
    format.html { render :action => "new" }
    format.json { render :json => @invoice.errors, :status => :unprocessable_entity }
  end
end
end

これらは有効な属性です。つまり、請求書を正常に作成するために必要な属性です。

def valid_attributes
{
  gross_amount: 3.14,
  net_amount: 3.14,
  number: "MyString",
  payment_on: "2013-01-01",
  vat_rate: 0.19
}
end

これらはすべて有効です。client_id が欠落している可能性がありますか?

カウントが 1 つも変化しなかったことを示しているだけなので、何が問題なのかわかりません。私は何を間違っていますか?

4

1 に答える 1

1

@gregates-あなたの答えは正しかった、なぜあなたはそれを削除したのですか?:-)もう一度投稿してください。ベストアンサーとしてチェックします。

これが解決策です:

post :create, { invoice: valid_attributes, client_id: @valid_client.to_param }, valid_session

それ以外の

post :create, { invoice: @valid_client.invoices.build(valid_attributes), client_id: @valid_client.to_param }

テストで。

また、valid_attributesの番号を変更する必要がありました。すべての検証をデバッグすると、それは工場出荷時と同じであることがわかりましたが、代わりに一意である必要があります。これで解決しました!みんなの助けてくれてありがとう!

于 2013-01-02T22:38:44.457 に答える