私のRailsプロジェクトには、多くのものを含めることができるものがあり、User
その多くを持つことができます。それぞれに多くのネストを含めることができます。Projects
Invoices
Invoice
Items
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
誰か助けてもらえますか?
ありがとう...