没有方法错误Rails(方法有)

时间:2013-12-13 07:28:49

标签: ruby-on-rails ruby

运行我的测试时,我一直得到一个NoMethodError未定义的方法'mutual_friendship'

我无法弄清楚原因,我在我的测试中有一个块调用此方法并且没有任何问题,然后我添加了这个调用它的新块并且在使用该方法之前它仍然抛出了这个错误工作得很好。任何想法?

此错误最终出现在第116行。整个块是

   should "delete the mutual friendship" do
      assert_equal @friendship2, @friendship1.mutual_friendship --line 116
      @friendship1.delete_mutual_friendship!
      assert !UserFriendship.exists?(@friendship2.id)
    end

现在这是我的UserFriendship.rb文件

    def mutual_friendship
      self.class.where({user_id: friend_id, friend_id: user_id}).first
    end

奇怪的是我在下面的块中调用了这个方法,并且在块出错之前。

 should "accept the mutual friendship" do
  @user_friendship.accept!
  assert_equal 'accepted', @user_friendship.mutual_friendship.state --method called!
 end

@friendship定义如下:

@friendship1 = users(:user1).user_friendships.where(friend_id: users(:user2).id).first
@friendship2 = users(:user2).user_friendships.where(friend_id: users(:user1).id).first

2 个答案:

答案 0 :(得分:1)

正如@sevenseacat暗示的那样,@ friendship1可能不属于UserFriendship类。在第115行,添加

assert_not_nil @friendship1
assert_instance_of UserFriendship, @friendship1

答案 1 :(得分:1)

不可能告诉您提供的代码,但我猜测@friendship1实例变量实际上不是UserFriendship类的实例。

您可能会在空结果上调用mutual_friendship - 如果users(:user1).user_friendships.where(friend_id: users(:user2).id)代码没有返回first调用的结果,就会发生这种情况。