我有一个模型,我正在编写一个测试用例。我也在夹具中加载了数据,但是当我测试子对象等于child时,我得到以下错误
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 :(得分:0)
如果我理解正确,您应该将代码更改为
test "relationship test" do
comm = Comm.find(6)
assert_equal(comm == comm.commvib.comm, true)
end
我认为Comm模型有has_one :commvib
关联。
答案 1 :(得分:0)
这里有一些问题。首先,错误信息:
你得到undefined local variable or method 'commvib'
因为Ruby不知道commvib
是什么意思,我也不知道。如果你想加载一个fixture,语法可能是
comm_vibs(:one)
假设“comm_vibs”是“comm_vib”的复数,并且您的fixture文件中有一个one:
键。
接下来,您的协会:
如果CommVib
belongs_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