2013-09-10 6 views
-2

У меня есть модель, для которой я пишу тестовый пример. Я загрузил данные в арматуре, а также, но когда я тестирую дочерний объект равно ребенок, я получаю следующее сообщение об ошибкеМодельный чехол

NameError: undefined local variable or method `commvib' for #<CommvibTest:0x00000009b2cc68> ]. 

Моего класс называется CommVib, а код для моего тестирования

test "relationship test" do 
    assert_equal(Comm.find(6) == commvib.Comm.find(6)) 
end 

, где CommVib имеет отношение belongs_to к классу Comm.

+0

Где вы определяете 'commvib'? – meagar

+0

CommVib и Comm оба класса модели –

ответ

0

Если я вас правильно понимаю, вы должны изменить свой код

test "relationship test" do 
    comm = Comm.find(6) 
    assert_equal(comm == comm.commvib.comm, true) 
end 

Я предполагаю, что Comm модель имеет has_one :commvib ассоциации.

+0

Нет у него has_many ассоциации –

0

Здесь есть несколько вопросов. Прежде всего, сообщение об ошибке:

Вы undefined local variable or method 'commvib', потому что Руби не знает, что commvib предназначается, чтобы быть, и ни сделать I. Если вы пытаетесь загрузить приспособление, синтаксис, вероятно

comm_vibs(:one) 

Предполагая, что «comm_vibs» является множественным числом «comm_vib», и у вас есть ключ one: в файле вашего прибора.

Далее, ваша ассоциация:

Если CommVibbelongs_to :comm, вы должны ссылаться на него как

comm_vib.comm 

Этот метод возвращает Comm объект, связанный с comm_vib - нет необходимости find его.

И, наконец, ваше утверждение:

assert_equal имеет эту подпись:

assert_equal(expected, actual, failure_message = nil) 

Так, чтобы использовать его, вы должны были бы сделать что-то вроде assert_equal(foo, bar) - не assert_equal(foo == bar).

В общем, ваш код должен, вероятно, выглядеть в конце:

assert_equal Comm.find(6), comm_vibs(:one).comm 
+0

Спасибо Якоб, это помогает –

Смежные вопросы