Rspec Mocking: ActiveRecord :: AssociationTypeMismatch

Я новичок в Rspec и пытаюсь настроить тест для профиля пользователя. Профиль принадлежит пользователю.

Теперь, У меня есть интеграция API со сторонним сайтом, который работает через модель пользователя, но некоторая информация для этой ссылки API содержится в профиле, поэтому у меня есть фильтр «after_update» в профиле, который сообщает родительскому пользователю о необходимости сохранения, что запускает обновление API.

Я пытаюсь написать для этого тест и получаю ActiveRecord :: AssociationTypeMismatch. Причина в том, что я использую фиктивного пользователя, но я пытаюсь проверить, что при обновлении профиля он отправляет: сохранить пользователю. Кроме того, модель User имеет процесс подтверждения электронной почты и соответствующие вызовы API в процессе создания, так что на самом деле создание пользователя только для проверки этого не является идеальным вариантом.

Вот мой тест:

it "should save the parent user object after it is saved" do
    user = double('user', :save => true )
    profile = Profile.create( :first_name => 'John', :last_name => 'Doe' )
    profile.user = user

    user.should_receive(:save)
end

Итак, очевидно, что ошибка ActiveRecord вызвана попыткой связать фиктивного пользователя с профилем, который ожидает, что будет связан настоящий пользователь.

Мой вопрос в том, как избежать такого рода проблем при написании тестов rails? Все, что я хочу, чтобы этот тест сделал, - это убедиться, что Profile вызывает: save на родительском User. Есть ли более разумный способ сделать это или обходной путь для ошибки ActiveRecord?

Спасибо!

7
задан Andrew 3 February 2011 в 05:15
поделиться