加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 从步骤中的嵌套类访问Cucumber的实例变量的最佳方法是什

发布时间:2020-12-17 07:10:29 所属栏目:百科 来源:网络整理
导读:这是一个简单的问题.我有黄瓜步骤,例如: Given /We have the test environment/ do @user = # Create User model instance @post = # Create Post model instance # etc...end 在Then步骤中我使用自己的类,它们简化了测试过程: Then /all should be fine/
这是一个简单的问题.我有黄瓜步骤,例如:

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

在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

在MyValidatorClass实例中,我处理上面的实例变量@ user,@ post等.

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

class MyValidatorClass
  def valid?
    @post
    @user
  end
end

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

validator = MyValidatorClass.new @user,@post

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

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

解决方法

在 World范围内定义的实例变量仅在World中可用.步骤定义属于World.你应该把MyValdatorClass放在World by World {MyValdatorClass.new}中.之后在此场景的stepdef中定义的实例变量将在此类和同一场景中的其他步骤定义中可用.

其他一些涉及您问题的想法:

如果你有一个步骤鉴于我们有测试环境,那么:

>你将在所有特征中复制它
>由于当前功能的阅读细节不必要,您的功能变得越来越长,读起来也越来越不舒服
>设置不需要的环境细节需要一些时间

更简单的创建实例的方法是添加帮助方法,为您创建它们:

module InstanceCreator
  def user
    @user ||= # Create user instance in World
  end
  #etc
end
World(InstanceCreator)

然后你就可以在需要时使用这个用户(没有任何@或@@).

如果除了创建实例之外还需要其他东西,请使用hooks

你的场景应该是自然的阅读.您不应该使用您需要的步骤来破坏它们,以使您的自动化层工作.

从^开始并以$结尾的正则表达式更好.没有它,步骤定义就变得过于灵活.您的第一步定义也将匹配给定我们有一些具体的测试环境.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读