我的控制器中有一个名为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"对于球员。 (我不太明白这个错误)
有人会知道如何拉出那个人,以便我可以测试吗?
非常感谢。
答案 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的操作调用克隆方法。然后包含此方法的规范,作为您为该操作编写的规范的一部分。