Ruby on rails Rails功能测试与所需的子项

Ruby on rails Rails功能测试与所需的子项,ruby-on-rails,testing,ruby-on-rails-3,functional-testing,fixtures,Ruby On Rails,Testing,Ruby On Rails 3,Functional Testing,Fixtures,正在尝试通过此功能测试: test "should create question" do assert_difference('Question.count') do post :create, :question => @question.attributes end end 但是@question有验证器,它要求特定的子项出现在特定的主题中: class Question < ActiveRecord::Base has_many :topic_q

正在尝试通过此功能测试:

test "should create question" do
  assert_difference('Question.count') do
    post :create, :question => @question.attributes
  end
end
但是@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
类问题:主题问题
验证:是否有主题
def有一个主题
(错误[:base]
测试“应该创建问题”吗
断言差异('Question.count')do
@question.topics@question.attributes
结束
结束

测试很好,需要更改的是控制器和/或模型。您尚未显示
create
操作的内容,但基本上有两种方法:

@question = Question.new(params[:question])
@question.build_topic(<some_params>)
if @question.save
  # ... etc ...
@question=question.new(参数[:question])
@问题.构建主题()
如果@question.save
#……等等。。。

或者,在
Question
模型中使用
接受:topic
的\u嵌套的\u属性,\u,然后在params散列中传递topic参数。哪种方法最好取决于您的具体情况。

有没有办法使用以下方法来做同样的事情?
post:create,Question:{topics:@a\u topics\u array}
@question = Question.new(params[:question])
@question.build_topic(<some_params>)
if @question.save
  # ... etc ...