Rspec controllertest:集合对象为空

时间:2013-11-07 08:52:07

标签: ruby-on-rails rspec

我正在编写由章节组成的课程应用程序。每章都有一个问答题测验。

每个问题只能有一个正确的答案。我想用RSpec测试这个规则。

在我的Answers控制器测试中,我写了一个测试:

  it "does not create a new correct answer when there is already a correct answer" do
        answer2 = Answer.create(title: "correct answer", is_correct: true, question_id: @question.id) 
        @question.answers << answer2
        post :create, question_id: @question.id, answer: { title: "new answer", is_correct: true }
        expect(Answer.count).to eq(1)

在这个测试中,我想确保当question.answers集合已经有一个is_correct属性设置为true的答案时,没有创建新答案。

然而,我的测试失败了。当我在我的答案控制器的创建操作中检查代码并检查该问题在其问题集中至少有一个答案时,似乎:

question

返回一个空数组

=> []

为什么question.answers集合为空,在测试中我添加了问题答案集的答案?

@question.answers << answer2

1 个答案:

答案 0 :(得分:0)

我无法回答,但我可以提供建议以找到实际问题。

有两件事你应该尝试隔离它,在这里:

  1. 确保您的测试中的@question与您的操作中的#id确实相同(您可以查看其#object_id,甚至是#create!
  2. 在测试中(实际上,在你不检查验证状态的任何地方),你应该使用#create而不是{{1}},这样无法创建记录将触发明显的异常。