2017-09-07 39 views
0

非常相似,这样的问题:Easy way to detect whether rspec or cucumber is running? 如何检测是否红宝石运行黄瓜测试

我怎么能在Ruby中发现,我下黄瓜运行?

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

共同的项目:C:\ RubyProjects \共同项目\共同

  • build_properties.rb

    ​​

黄瓜项目:C:\ RubyProjects \程序\ 2017年\功能\ step_definitions

  • test_rest.rb

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

一些其他的项目:C:\ RubyProjects \程序\ 2017年\

  • File.rb

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

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

+1

能否请您解释一下为什么你的代码需要知道,如果它是在测试环境中运行?而如何你想改变你的代码的行为,因为如果你的代码需要知道,如果它在测试或其他环境中运行我会认为这是一个代码味道。为什么测试代码如果代码在测试中的工作方式与其他环境中的不同?这听起来像一个[XY问题(https://meta.stackexchange.com/a/66378/284887)给我。 – spickermann

+0

你可能是正确的,这很可能是我的错误编码习惯。我正在尝试解决的一个问题是将一个项目的通用代码包含到多个其他项目中。黄瓜有一个特定的文件结构,我试图让代码知道并加载文件相对正确。 –

+0

也许这只是我,但是为什么在测试环境中运行时,从源文件到要更改文件的相对路径?你想要一个不同的文件吗?你介意添加一个你试图实现的简单例子吗? – spickermann

回答

0

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

ENV['CUCUMBER'] = "true" 

然后检查它,你想:

if ENV['CUCUMBER'] 
    ... 
end 

你可以在一个方法某处包裹这一点,用它。

编辑: @ spikermann的意见是绝对正确的。当然,如果你的代码依赖于env,那么你做错了什么。但在某些情况下(一次性代码或种类),进行破解可能更容易。

+0

我得到这个错误:没有将隐式转换为对于ENV ['CUCUMBER'] = true的字符串(TypeError) –

+0

对不起,这是我的错。我编辑了答案。只要制作一个“真实”的字符串。 –