Как rspec присоединиться к записи во многие ко многим в рельсах 3.1.0 - PullRequest
0 голосов
/ 18 января 2012

Вот создание в контроллере rfq:

  def create
    if has_create_right?
      @rfq = Rfq.new(params[:rfq], :as => :roles_new )
      #save into join table rfqs_standards
      params[:rfq][:standard_ids].each do |sid|
        @rfq.standards << Standard.find(sid.to_i) if !sid.nil?
      end
    if @rfq.save
        redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
      else
        flash.now[:error] = "RFQ not saved!"
        render 'new'
      end
    end
  end

Вот код rspec

  describe "'create'" do
    it "should be successful for corp head" do
      session[:corp_head] = true
      session[:user_id] = 1
      s = Factory(:standard)
      rfq = Factory.attributes_for(:rfq)
      rfq.standards << s
      get 'create', :rfq => rfq
      response.should redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
    end
  end

Ошибка:

  1) RfqsController 'create' should be successful for corp head
     Failure/Error: rfq.standards << s
     NoMethodError:
       undefined method `standards' for #<Hash:0x6741570>
     # ./spec/controllers/rfqs_controller_spec.rb:65:in `block (3 levels) in <top (requi

Что правильноспособ проверить запись присоединения?Благодаря.

1 Ответ

1 голос
/ 18 января 2012

Из этой части вашего теста:

    rfq = Factory.attributes_for(:rfq)
    rfq.standards << s

может показаться, что rfq создается как хэш атрибутов, а не как полная модель.Вы можете попробовать присоединиться к standard_ids следующим образом:

describe "'create'" do
  it "should be successful for corp head" do
    session[:corp_head] = true
    session[:user_id] = 1
    s = Factory(:standard)
    rfq = Factory.attributes_for(:rfq)
    rfq[:standard_ids] = [s.id] # attach standard_id's to mimic the POST'ed form data
    get 'create', :rfq => rfq
    response.should redirect_to URI.escape("/view_handler?index=0&msg=RFQ saved!")
  end
end

Однако, кажется, что вы можете выполнить все это, используя вложенные атрибуты - см. http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

...