【发布时间】: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