2012-01-18 4 views
0

인 RFQ 컨트롤러에서 만든 : 여기 에 기록 가입 RSpec에 방법 대다 레일 3.1.0 여기

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 

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 

오류 인 RSpec에 코드입니다 :

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

:

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

+0

를 볼 때 새 RFQ 저장됩니다. 이제 문제는 rspec하는 방법입니다. 여기에 조인 테이블에 저장하는 방법에 대한 게시물 - http://stackoverflow.com/questions/8736805/how-to-save-2-id-in-joint-table-for-many-to-many-relationship- in-rails-3-1. – user938363

+0

동의하지만 위의 코드는 모델을 저장하는 방법이 아니라 RSpec 테스트를 수정하는 방법입니다 (더 명확하게 업데이트했습니다). 중첩 된 속성에 대한 주석은 단순히 조인 된 모델의 저장을 구현하는 방법에 대한 주석/제안이었습니다. 당신은 habtm 관계에 대해 중첩 된 속성도 잘 작동하지 않지만, 당신이 자신의 작전에서 얻은 habtm에 대해 말하고 있다는 것은 확실하지 않습니다. – PinnyM

+0

테스트하여 실패했습니다. 오류 : 오류/오류 : '생성', : rfq => rfq NoMethodError : 기대하지 않았을 때 개체가 없습니다! 문제는 rfq (attributes_for)가 객체가 아닌 것과 같습니다. 레일 콘솔에서 rfq가 객체로 만들어지면 rfq.standards <<는 오류없이 실행됩니다. 생성 코드는 새로운 rfq를 만드는 것으로 보입니다. 그러나 rspec 코드가 실패했습니다. 이제 rfq.new (params [: rfq])가 컨트롤러 실행에서 rfq 객체로 처리 될 수 있는지 확인하십시오. 어쨌든 고마워. – user938363