0

我正在开发一个由章节组成的课程应用程序。每章都有一个带有问题和答案的测验。

每个问题只能有一个正确答案。我想用 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.answers 集合中是否有至少一个答案时,似乎:

question

返回一个空数组

=> []

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

@question.answers << answer2
4

1 回答 1

0

我不能肯定回答,但我可以提供建议以找到实际问题。

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

  1. 确保@question你的测试和你的行动确实是一样的(你可以检查它#id,甚至它的#object_id
  2. 在测试中(实际上,在所有你不检查验证状态的地方),你应该使用#create!而不是#create,这样创建记录失败会触发一个明显的异常。
于 2013-11-07T10:21:43.260 回答