【问题标题】:How to access a cucumber CONSTANT in cucumber env.rb from a page object (siteprism) ruby class?如何从页面对象(siteprism)ruby 类访问黄瓜 env.rb 中的黄瓜常数?
【发布时间】:2016-12-05 12:35:59
【问题描述】:

我在黄瓜的 env.rb 文件中定义了一个常量:

CONFIG = YAML::load_file("#{File.dirname(__FILE__)}/../../configs/config.yaml")

然后我想访问那个“config.yaml”文件中的值,比如CONFIG['url']

我遇到的问题是我有一个页面对象 siteprism 类,但我不知道如何访问它?

class MyPage < SitePrism::Page
  set_url CONFIG['url']
...

它失败了:

uninitialized constant MyPage::CONFIG (NameError)

我想访问在我的 env.rb 文件中定义的 CONFIG 常量,而不是来自 MyPage 的常量。你们知道我是怎么做到的吗?

【问题讨论】:

    标签: ruby cucumber constants pageobjects site-prism


    【解决方案1】:

    使用::,如::CONFIG['url']

    请注意,鉴于 CONFIG 对应的 "YAML::load_file(",此表达式的值将是 nil

    【讨论】:

    • 对不起,引号是一个错字。已编辑。当我在 MyPage 类中尝试 ::CONFIG['url'] 时,我得到:uninitialized constant CONFIG Did you mean? RbConfig (NameError)
    • 是否以某种方式加载了 env.rb 文件?
    • 我认为问题是 SitePrism 特有的,尽管我不确定是什么。该 gem 有一个名为 set_url 的方法,所以如果我尝试在那里使用 CONFIG,它就不起作用并且会因上述错误而失败。但是,如果我尝试在该类中使用 CONFIG 但在我在那里创建的新方法中使用它可以正常工作。我试图通过使用set_url(new_method_to_retrieve_CONFIG) 来解决这个问题,但这也不起作用。不确定是否有任何解决方法。现在,我只是在我的配置文件和set_url "http://url" 命令中复制“url”...
    【解决方案2】:

    确保您的加载顺序正确。 按照建议使用顶级命名空间。 更好的逻辑是将它委托给一个帮助模块,在你的类中包含这个帮助模块。然后调用辅助模块方法

    class MyKlass
      include MyHelper
    
      set_url helper_method[:key]
    end
    
    module MyHelper
      def helper_method
        {
          key: 'http://www.google.com/'
        }
      end
    end
    

    如果其他人认为 set_url 不起作用。随时在 SitePrism 存储库上提出问题:https://github.com/natritmeyer/site_prism/issues,或者在这里询问是否更容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-03
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多