2

私のRailsプロジェクトには、多くのものを含めることができるものがあり、Userその多くを持つことができます。それぞれに多くのネストを含めることができます。ProjectsInvoicesInvoiceItems

class Invoice < ActiveRecord::Base

  attr_accessible :number, :date, :recipient, :project_id, :items_attributes

  belongs_to :project
  belongs_to :user

  has_many :items,    :dependent  => :destroy

  accepts_nested_attributes_for :items, :reject_if => :all_blank, :allow_destroy => true

  validates :project_id,  :presence => true

  def build_item(user)
    items.build(:price => default_item_price(user), :tax_rate => user.preference.tax_rate)
  end

  def set_number(user)
    self.number ||= (user.invoices.maximum(:number) || 0).succ  
  end

end

class InvoicesController < ApplicationController

  def new
    @invoice = current_user.invoices.build(:project_id => params[:project_id])
    @invoice.build_item(current_user)
    @invoice.set_number(current_user)
    @title = "New invoice"
  end

  def create
    @invoice = current_user.invoices.build(params[:invoice])    
    if @invoice.save
      flash[:success] = "Invoice created"
      redirect_to invoices_path
    else
      render :new
    end
  end

end

現在、RSpecとFactoryGirlを使用して請求書の作成をテストしようとしていますが、次のようなPOST作成アクションに関連するものを除いてすべてのテストに合格しています。

it "saves the new invoice in the database" do
  expect {
    post :create, invoice: attributes_for(:invoice, project_id: @project, items_attributes: [ attributes_for(:item) ])
  }.to change(Invoice, :count).by(1)
end

それは私にこのエラーを与え続けます:

Failure/Error: expect {
count should have been changed by 1, but was changed by 0

なぜこれが起こるのか誰か教えてもらえますか?

これは私factories.rbがオブジェクトを作成するために使用するものです:

FactoryGirl.define do

  factory :invoice do
    number { Random.new.rand(0..1000000) }
    recipient { Faker::Name.name }
    date { Time.now.to_date }
    association :user
    association :project
  end

  factory :item do
    date { Time.now.to_date }
    description { Faker::Lorem.sentences(1) }
    price 50
    quantity 2
    tax_rate 10
  end

end

誰か助けてもらえますか?

ありがとう...

4

0 に答える 0