2012-10-05 34 views
4

我有一些ruby測試調用了不同的模塊,他們在執行過程中詳細說明了他們在執行某些「放置」命令時所做的操作。cucumber/ruby​​:可能將「puts」輸出到--format html文件中?

如果您在控制檯的測試,那麼你將看到的「看跌期權」命令的輸出在控制檯中,但如果你運行帶有該選項的測試:

ruby --format html --output file.html 

那麼所有信息丟失。有沒有辦法在HTML報告中記錄簡單的字符串消息?

+0

是「把」預期輸出的命令輸出部分可以包括這個模塊從你的程序?還是他們是爲了調試/信息的目的?如果希望從程序輸出它們,則最好通過編寫預計這些行的功能在HTML報告中捕獲它們。有關示例,請參閱此[blogpost](http://blog.jcoglan.com/2009/11/14/testing-command-line-apps-with-cucumber/)。如果「puts」輸出用於調試,那麼您不應該試圖將它們放入HTML報告中;這不是一個推薦的做法。 –

+0

這些輸出實際上是在搶救某個特定模塊時捕獲的失敗,所以我不認爲我們可以爲這些錯誤編寫特定功能,即該功能已經存在,我們遍歷大約100個URL,其中一些失敗並且我們希望在HTML報告中輸出該失敗。你知道一種方法來捕獲HTML報告中的失敗嗎? – mickael

回答

-1

我嘗試以下步驟:

When /^I do something$/ do 
    puts "Hello" 
end 

Then /^something happens$/ do 
end 

...用下面的命令:

cucumber -f html -o results.htm 

...當我在瀏覽器中打開了results.html文件,它顯示「你好「消息剛剛顯示該步驟後。我已經把它貼在HTML輸出的相關部分,所以你可以看到,從puts輸出有:

<!-- the first step --> 
<li id='features_thing_feature_4' class='step passed'> 
    <div class="step_name"> 
     <span class="keyword">When </span> 
     <span class="step val">I do something</span> 
    </div> 
    <div class="step_file"> 
     <span>features/step_definitions/thing_steps.rb:1</span> 
    </div> 
</li> 
<!-- anything that the above step passed to `puts` --> 
<li class="step message">Hello</li> 
<!-- the second step --> 
<li id='features_thing_feature_5' class='step passed'> 
    <div class="step_name"> 
     <span class="keyword">Then </span> 
     <span class="step val">something happens</span> 
    </div> 
    <div class="step_file"> 
     <span>features/step_definitions/thing_steps.rb:5</span> 
    </div> 
</li> 

什麼,演示的是,當黃瓜的puts方法被調用(即:直接從步內)輸出將包含在html輸出中。但如果puts調用來自其他地方(例如:您的模塊),那麼它將不會被包括在內。您可以考慮將您的puts調用從模塊移動到步驟。此外,使用puts是不是真的最好的做法,所以你可能要考慮完全放棄它...

+1

啊,我認爲這可能是問題......因爲投標是在特定模塊內編寫的。 如果這種輸出信息的方法不是最好的方法,那麼顯示哪裏出現問題的方法是什麼?現在我們有一個被稱爲100次的模塊來檢查不同的URL;如果呼叫失敗,它只是通過救援獲得,我們通過'put'手動輸出消息,以便腳本不會停止。但在實踐中,這是一個失敗,在HTML報告中看到這種情況是有用的... 有關如何實現該目標的任何想法? – mickael

+0

最好的方法是將結果公開給測試並在那裏聲明它。 –

0

你能記住世界中的每個場景中的前鉤:在您的支持類

# features/support/env.rb 
Before do |scenario| 
    $world = self 
end 

然後和外界的模塊,可以使用看跌期權爲:

$world.puts 'something' 

還可以獲取/設置黃瓜實例變量爲:

$world.instance_variable_get(:@user) 
$world.instance_variable_set(:@user, user) 

我也寧願提取那些2層的方法來幫手了更好的可視性:

module Helpers 
    def get_scenario_variable(symbol) 
    $world.instance_variable_get(symbol) 
    end 

    def set_scenario_variable(symbol, value) 
    $world.instance_variable_set(symbol, value) 
    end 
end 

然後,你需要這些方法