在Rspec的钩子

时间:2016-01-20 18:37:29

标签: ruby rspec constants

我是Rspec的新手,当我提出问题时,我正在编写一些测试示例。

首先,我使用全局变量来定义我将在许多测试中使用的三个常量值。例如:

$message = 'this is a test'

但是,我注意到这个全局被转移到其他测试文件并导致问题。好的......然后决定避免使用全局变量,因为如果我的测试文件数量增加,将来会导致很多痛苦。

然后我去了let()块。例如:

let(:message) { 'this is a test' }

现在问题是这个变量不能在钩子之前和之后使用。好的...

我的最后一次尝试是使用上下文/描述中的常量,如下所示:

self::MESSAGE =  'this is a test'

然而,就像我们不能在钩子里面使用它一样,因为它们不是类或模块。

所以,我被卡住了......

你们是如何处理的?我需要为此创建实例变量吗?这是我可以使用的其他替代方案吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

您还有另一个用于定义数据的选项 - 实例变量。

before do
  @data = [ {one: 1, two: 2},
            {one: 2, two: 3} ]
end

您可以在before范围内的所有测试中使用@data。这与let几乎完全相同,仅用于设置静态数据,但它可能更适合您 - 如果没有看到您的代码,则很难说。