passage de paramètres à la poste :créer une demande ruby-on-rails-3.1, Rspec, usine-fille

Je suis en train d'écrire un contrôleur de spécifications pour la création d'un achat avec un achat en ligne. L'achat est créé très bien avec tous les attributs que je lui donner, mais l'achat de la ligne de l'élément n'est pas créé. Voici mon code:

usines.rb

FactoryGirl.define do
  factory :purchase do |f| 
    f.sequence(:po_number) { |n| "0000-00#{n}" }
    f.sequence(:ship_to) { |n| "Test Corp#{n}"}
    f.sequence(:ship_via) {|n| "Test Delivery#{n}" }
    f.sequence(:terms) {|n| "My terms#{n}" }
    f.sequence(:qa_requirements) {|n| "Requirment#{n}" }
    f.sequence(:justification) {|n| "Justification#{n}" }
    f.become_part_of_delivered_product true
    f.immediately_delivered_to_stc_client false
    f.remain_for_contract_at_stc_as_gov_prop false
    f.consumed_in_job_requirements true
    f.used_in_repair_of_gov_prop false
    f.is_gov_prop_in_possession_of_stc false
    f.sequence(:required) {|n| "2011-10-0#{n}" }
    f.prd_number_id { |n| n.association(:prd_number).id }
    # f.order_for_id { |o| o.association(:user) }
    f.submitted_by_id { |s| s.association(:submitted_by).id }
    # f.ordered_for_date { Time.now.to_s }
    f.submitted_by_date { Time.now.to_s }
    f.quality_system_classification_id { |q| q.association(:quality_system_classification).id }
    f.after_create { |c| Factory(:purchase_line_item, purchase: c) }
  end

  factory :purchase_line_item do |f| 
    f.sequence(:item_description) {|n| "Desc#{n}" }
    f.unit_price "100.00"
    f.qty "40"
    f.sequence(:charge_number) {|n| "000-00#{n}" }
  end 
 end

PurchaseLineItem.rb

belongs_to :purchase
validates_presence_of :item_description,
                      :unit_price,
                      :qty,
                      :charge_number

Achat.rb

  belongs_to :authorized_signers
  belongs_to :vendor
  belongs_to :purchase_type
  belongs_to :quality_system_classfication
  belongs_to :order_by, :class_name => "User", :foreign_key => "order_by_id"
  belongs_to :submitted_by, :class_name => "User", :foreign_key => "submitted_by_id"
  belongs_to :approved_by, :class_name => "User", :foreign_key => "approved_by_id"
  belongs_to :purchased_by, :class_name => "User", :foreign_key => "purchased_by_id"

  has_many :purchase_line_items
  has_many :audits

  accepts_nested_attributes_for :purchase_line_items, :allow_destroy => true

  validates_presence_of :required,
                        :ship_to,
                        :ship_via,
                        :terms,
                        :quality_system_classification_id,
                        :prd_number_id

Achat Contrôleur De

load_and_authorize_resource

def new
    @purchase = Purchase.new
    1.times { @purchase.purchase_line_items.build }
end

def create
  @purchase = Purchase.new(params[:purchase])
  @purchase.without_auditing do
    if @purchase.save
      flash[:notice] = "Successfully created purchase."
      redirect_to @purchase
    else
      render action: 'new'
    end
  end
end

PurchaseController spec

require 'spec_helper'

describe PurchasesController do

  login_user

  describe "POST create" do
    before(:each) do
      @ability.can :create, Purchase
    end

    it "should pass the params to purchase" do
      purchase = Factory(:purchase)
      post :create, purchase: purchase.attributes.except("id")
      assigns(:purchase).po_number.should == purchase.po_number     
    end

    it "should pass the params to purchase_line_items" do
      purchase = Factory(:purchase)   
      post :create,   purchase: purchase.attributes, purchase_line_items_attributes: purchase.purchase_line_items.first.attributes 
      assigns(:purchase).purchase_line_items.first.unit_price.should == purchase.unit_price
    end
  end
end

Merci d'avance

OriginalL'auteur brink | 2011-10-25