Рубин на рельсах, ошибка в модульном тесте - PullRequest
1 голос
/ 18 августа 2011

У меня отношения один ко многим, в одной группе много серверов. Чтобы проверить это отношение, я пишу этот тест, но он работает только тогда, когда я закомментировал строку. Почему?

test 'Group can include server' do
    group = groups(:default)
    group.servers << servers(:default)
    # Test work, when I uncomment this line:
    # assert_instance_of Array, group.servers
    group.save
    assert_instance_of Server, group.servers.first
end

1 Ответ

1 голос
/ 18 августа 2011

Потому что group.servers не Array.Он ведет себя очень похоже на единицу, но на самом деле это экземпляр ActiveRecord :: Association :: HasManyAssociation .Его класс-предок (ActiveRecord :: Association :: AssociationProxy) фактически передает даже class через базовый объект, поэтому group.servers.class дает Array, но на самом деле это не единица.

Edit: Быстрое примечание, чтобы сказать, что, хотя я почти уверен, что это причина вашего отказа, это не имеет полного смысла;в моих тестовых приложениях эквивалент group.servers.instance_of? Array равен true, а source из assert_instance_of подразумевает, что этого должно быть достаточно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...