Я работаю над приложением курса, составленным из глав. В каждой главе есть викторина с вопросами и ответами.Rspec controllertest: коллекция объекта пуста
В каждом вопросе может быть только один правильный ответ. Я хочу проверить это правило с помощью RSpec.
В моем тесте ответы контроллера я написал тест:
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.answer пуста, когда в тесте я добавил ответ на подбор ответов на вопрос?
@question.answers << answer2
Что такое 'вопрос'? –
хорошо, как я могу передать вопрос с ответом на мои ответы. # Create action method. Спасибо за вашу помощь. – Toontje
не стоит ли вам сохранять @question после ответа? в вашем контроллере вопрос загружается из db. Кстати, вы не должны проверять это внутри контроллера, так как контроллер не отвечает за эту логику, вы должны проверить, что в ваших ответах ответ недействителен, если вопрос, к которому он принадлежит, уже имеет правильный ответ – arieljuod