从步骤内的嵌套类访问 Cucumber 的实例变量的最佳方法是什么?

odi*_*apc 5 ruby cucumber

这是一个简单的问题。我有黄瓜步骤,例如:

Given /We have the test environment/ do
  @user = # Create User model instance
  @post = # Create Post model instance
  # etc...
end
Run Code Online (Sandbox Code Playgroud)

在我使用自己的类的Then步骤中,它们简化了测试过程:

Then /all should be fine/ do
  # MyValidatorClass has been defined somwhere in features/support dir
  validator = MyValidatorClass.new
  validator.valid?.should be_true
end
Run Code Online (Sandbox Code Playgroud)

在 MyValidatorClass 实例内部,我处理了上面的实例变量@user、@post 等。

从 MyValidatorClass 类实例访问 Cucumber 变量的最佳和最简单的方法是什么?

class MyValidatorClass
  def valid?
    @post
    @user
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我已经手动将所有参数传递给 MyValidatorClass 实例:

validator = MyValidatorClass.new @user, @post
Run Code Online (Sandbox Code Playgroud)

但我认为这个目的很糟糕。我需要更透明的东西,因为我们使用的是 Ruby,这就是为什么!

做这个的最好方式是什么?

odi*_*apc 0

我已经找到了可能的灵魂。您应该从实例变量迁移到类变量:

Given /We have the test environment/ do
  @@user = # Create User model instance
  @@post = # Create Post model instance
  # etc...
end

Then /all should be fine/ do
  # MyValidatorClass has been defined somwhere in features/support dir
  validator = MyValidatorClass.new
  validator.valid?.should be_true
end

...    

class MyValidatorClass
  def valid?
    @@post
    @@user
  end
end
Run Code Online (Sandbox Code Playgroud)