Rspec:如何在控制器规范中分配实例变量

类TestController<应用控制器
#....
私有的
定义某些方法
除非@my_variable.nil?
#...
返回真值
终止
终止
终止

我想直接在控制器规范中测试一些方法:

需要“spec\u helper”
描述TestController所做的工作
它“测试某些方法”
电话=电话。新建(…)
controller.assign(:my_变量,phone)#不工作
controller.send(:some\u方法)。应为\u true
终止
终止

如何从控制器规范设置TestController实例变量@my_variable

在控制器中测试私有方法时,我倾向于使用匿名控制器,而不是使用send,因为我不想直接调用私有方法,而是调用私有方法的接口(或者,在下面的测试中,有效地中断该接口)。因此,在您的情况下,可能类似于:

需要“spec\u helper”
描述TestController所做的工作
控制器do
def测试方法
某些方法
终止
终止
请描述“使用某种方法进行电话测试”的做法
主题{controller.test\u some\u method}
上下文“当my_变量不是nil时”执行
在{controller.instance_variable_set(:@my_variable,Phone.new(…)}之前
这{应该是真的}
终止
上下文“当我的_变量为nil时”执行
在{controller.instance_variable_set(:@my_variable,nil)}之前
它{不应该是真的}或者应该是假的或者别的什么
终止
终止
终止

在本文中,对直接测试私有方法的问题进行了一些很好的讨论;A、 这使我倾向于使用匿名控制器,但你的意见可能不同

发表评论