2017-09-07 115 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

對不起,這是我的錯。我編輯了答案。只要製作一個「真實」的字符串。 –