У меня есть приложение для рельсов, которое я пытаюсь проверить. В этом приложении у меня есть модель вопроса, в которой есть много ответов.FactoryGirl не создает ассоциации
class Question < ActiveRecord::Base
has_many :answers, dependent: :destroy
accepts_nested_attributes_for :answers, reject_if: lambda { |a| a[:text].blank? }, allow_destroy: true
...
end
и
class Answer < ActiveRecord::Base
belongs_to :question
...
end
Вот посмотрите на мой файл factories.rb, в котором я пытаюсь создать вопрос со многими ответами. (Примечание: Я последовал за пример, перечисленные здесь https://www.google.com/search?sourceid=chrome-psyapi2&ion=1&espv=2&ie=UTF-8&q=factorygirl%20associations точно, если я не упускать из виду то, что я не вижу.)
factory :question do
sequence(:text) { |n| "What is #{n} + #{n}?" }
factory :question_with_answers do
transient do
answers_count 5
end
after(:create) do |question, evaluator|
create_list(:answer, evaluator.answers_count, question: question)
end
end
end
factory :answer do
sequence(:text) { |n| "Sample Answer #{n}" }
question
end
А вот посмотреть на спецификации:
require 'spec_helper'
describe Question do
let!(:question) { FactoryGirl.create :question_with_answers }
it "should have 5 anwers" do
expect(question.answers.length).to eq 5
end
end
Когда я бегу это основная спецификация, я получаю следующее сообщение об ошибке отказа /:
1) Question should have 5 anwers
Failure/Error: expect(question.answers.length).to eq 5
expected: 5
got: 0
(compared using ==)
# ./spec/models/question_spec.rb:17:in `block (2 levels) in <top (required)>'
Я не знаю, почему он не ассоциирует ответы на вопрос. Я вижу что-то прямо под носом? Заранее спасибо.
Другие, возможно, полезной информация - Я использую: factorygirl 4.5.0 рельсы 4.1.5 RSpec 3.1.0
попробуйте использовать id 'create_list (: answer, valuator.answers_count, question_id: question.id)', если нет, попробуйте передать вопрос непосредственно каждому из ответов. как 'answer.question = question; answer.save! ' –
К сожалению, subbing в question_id тоже не работает. Я уже изменил спецификацию, чтобы вручную назначать ответы на вопросы, поэтому у меня она работает - казалось, что есть лучший способ сделать это. Спасибо за ваш ответ. –