0

この機能テストに合格するために取得しようとすると、必要な子どもたちとRailsの機能テスト

test "should create question" do 
    assert_difference('Question.count') do 
    post :create, :question => @question.attributes 
    end 
end 

しかし、具体的には、1つのトピックに存在すると、特定の子どもたちが必要なバリデータを@questionあります

class Question < ActiveRecord::Base 
    has_many :topic_questions 
    has_many :topics, :through => :topic_questions 

    validate :has_topic 

    def has_topic 
     (errors[:base] << "You must have one topic") if (topics.count < 1) 
    end 
    end 

どうでしょう私は1)テストで@questionのトピックを構築し、2).attributes()関数によって渡されないのでpostメソッドに渡しますか?

答えて

1
 
test "should create question" do 
    assert_difference('Question.count') do 
    @question.topics<<Topic.new(**set topics required and attribute here) 
#or try this line of code 
    @question[:topics]={:name=>"bla bla" ** set attribute here what u need} 
    post :create, :question => @question.attributes 
    end 
end 
+0

次の方法で同じことをする方法はありますか? 'post:create、question:{トピック:@a_topics_array}' –

0

テストはうまくいきます。これはコントローラやモデルの変更が必要です。あなたはcreateアクションの内容を示していないが、それを行うには、2つの方法は基本的にあります

@question = Question.new(params[:question]) 
@question.build_topic(<some_params>) 
if @question.save 
    # ... etc ... 

あるいは、Questionモデルでaccepts_nested_attributes_for :topicを使用し、paramsハッシュで話題のパラメータを渡します。どの方法があなたの特定の状況に最も適しているか。

関連する問題