【问题标题】:How to Detect if Ruby is Running a Cucumber Test如何检测 Ruby 是否正在运行 Cucumber 测试
【发布时间】:2017-09-07 17:25:06
【问题描述】:

与这个问题非常相似:Easy way to detect whether rspec or cucumber is running?

如何在 Ruby 中检测到我在 cucumber 下运行?

如果正在使用的代码是黄瓜项目或标准脚本,我在公共代码项目中有一些路径变量需要更改。我试图涵盖一个相对路径问题。 require_relative '../../{filename}' 会在黄瓜结构下文件结构不同时失败。它需要再遍历两个级别,例如:'../../../../{filename}'。

普通项目:C:\RubyProjects\common-project\common

  • build_properties.rb

    def build_properties_from_yaml('', '')
      params = YAML.load_file(File.absolute_path << '/utils/parameters.yml')
    end
    

黄瓜项目:C:\RubyProjects\programs\2017\features\step_definitions

  • test_rest.rb

    require_relative './../../../RubyProjects/common-project/common'
    
    class Verify
    
      include Common
    
      build_properties_from_yaml('', '')
    end
    

其他一些项目:C:\RubyProjects\programs\2017\

  • 文件.rb

    require_relative './../../RubyProjects/common-project/common'
    
    class RunCode
    
      include Common
    
      build_properties_from_yaml('', '')
    end
    

对于“utils”文件夹,它位于 cucumber 中的 features 文件夹下,但在其他没有 cucumber 的项目中没有这样的文件夹。这就是抛出代码的原因,我想在 yaml 加载过程中检查黄瓜。

【问题讨论】:

  • 您能否解释一下为什么您的代码需要知道它是否在测试环境中运行?以及您想如何更改代码的行为,因为如果您的代码需要知道它是否在测试或其他上下文中运行,我会认为它是一种代码异味。如果代码在测试中的工作方式与在其他环境中不同,为什么还要测试代码?对我来说,这听起来像是 xy problem
  • 您可能是对的,这很可能是我的错误编码习惯。我试图解决的一个问题是将一个项目中的通用代码包含到多个其他项目中。 cucumber 有一个特定的文件结构,我试图让代码知道并相对正确地加载文件。
  • 也许只有我一个人,但是为什么在测试环境中运行时,从源文件到你想要的文件的相对路径会发生变化?您想要求不同的文件吗?您介意添加一个简化的示例来说明您尝试实现的目标吗?
  • @spickermann,我尝试添加一个示例。

标签: ruby cucumber environment-variables


【解决方案1】:

如果if Rails.env.test? 不适合您,您可以添加到features/support/env.rb

ENV['CUCUMBER'] = "true"

然后在你想要的地方检查它:

if ENV['CUCUMBER']
  ...
end

你可以将它包装在某个方法中并使用它。

编辑: @spikermann 的 cmets 绝对正确。当然,如果您的代码依赖于环境,那么您就做错了。但在某些情况下(一次性代码或类似情况),进行 hack 可能更容易。

【讨论】:

  • 我收到此错误:ENV['CUCUMBER'] = true 没有将 true 隐式转换为字符串 (TypeError)
  • 对不起,这是我的错。我已经编辑了答案。只需制作一个“真实”字符串。
猜你喜欢
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多