如何在控制器中测试特定方法

时间:2017-05-16 20:23:10

标签: ruby-on-rails rspec

我的控制器中有一个名为clone的规范,我在其中接受用户并克隆用户的副本。

我需要做的是在我的控制器内(我的模型是player,因此控制器是player_controller.rb,我需要测试下面列出的特定方法。

def clone
  new_player = @player.dup
  new_player.id = nil
  new_player.serial = nil
  new_player.name = "Copy of #{@player[:name]}"
end

describe '#clone' do
  it 'creates a clone of an existing player' do
    new_player = player.dup
  end
end

当然,我在规范中所做的是镜像控制器内方法的第一行,因此它为我创建了一个新的播放器,但它并没有更新规范的其他功能,例如名称。这就是我遇到麻烦的原因。如何在控制器中专门调用方法?

我已经尝试了

new_player = player.controller.send(:clone)

以及

new_player = player.(:clone)

第一个错误无法识别clone,第二个错误表明我收到了未定义的方法" call"对于球员。 (我不太明白这个错误)

有人会知道如何拉出那个人,以便我可以测试吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

最后你的控制器只是一个Ruby类。创建它的实例并为刚刚创建的对象调用方法clone。

PlayerController.new.clone

PlayerController.new.send(:clone)

我在这里看到的问题是@player从哪里开始初始化?这个类没有构造函数(因为它是一个控制器)。如果有其他方法说'my_test_method',则初始化它。然后首先在PlayerController对象上调用该方法,然后在同一对象上调用clone方法。

my_object = PlayerController.new
my_object.my_test_method
my_object.clone

如果从设置了@player的操作调用克隆方法。然后包含此方法的规范,作为您为该操作编写的规范的一部分。