-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

与阶级CommVibbelongs_to关系在哪里。Comm

4

2 回答 2

0

这里有几个问题。首先,错误信息:

你得到undefined local variable or method 'commvib'是因为 Ruby 不知道是什么commvib意思,我也不知道。如果你试图加载一个夹具,语法可能是

comm_vibs(:one)

假设“comm_vibs”是“comm_vib”的复数,并且您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)- not的操作assert_equal(foo == bar)

总而言之,你的代码最终应该是这样的:

assert_equal Comm.find(6), comm_vibs(:one).comm
于 2013-09-10T13:03:21.647 回答
0

如果我对您的理解正确,您应该将代码更改为

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

我假设 Comm 模型有has_one :commvib关联。

于 2013-09-10T12:57:58.773 回答