20

我正在为我的控制器编写一个 rspec 测试,但我找不到以下问题的解决方案。对于其中一个边缘案例测试,我需要验证一个实例变量的值。如何在无需定义访问器的情况下访问它?默认情况下通常:

controller.variable.should == '3.15' 

不起作用。

定义

attr_reader :变量

只是为了让测试通过会很愚蠢,我相信有一种更智能的方法。

4

1 回答 1

44
controller.instance_variable_get(:var)

如果您发现自己正在这样做,您可能需要重新考虑您的信息隐藏方法,以便您测试基本行为而不是附带的实现细节。您的测试应确保“事物”按应有的方式发挥作用,而不会过于紧密地绑定到特定的实现。

编辑:难道不是assigns(:var)轨道测试魔术与控制器做同样的事情吗?

于 2009-07-16T14:08:28.353 回答