簡體   English   中英

在黃瓜繞鈎(Ruby)中多次調用Block

[英]Calling Block multiple times in Cucumber Around Hook (Ruby)

我正在嘗試運行一個場景幾次(30),以獲得一個不錯的統計樣本。 但是,該塊僅執行一次; 隨后的每個時間都會導致該方案被調用而不執行(盡管它表示該方案確實已成功完成,但時間約為5毫秒)。

Around('@mass_benchmark') do |scenario, block|
  $seconds_taken = "SECONDS TAKEN NOT SET"
  @time_array = []
  30.times do
    before_hook(scenario)
    block.call
    after_hook(scenario)
    @time_array << $seconds_taken
  end
  write_time_array_to_file(@time_array, scenario_name)
end

標記@mass_benchmark執行此塊,與〜@ mass_benchmark相反,后者僅正常執行場景。 方法before_hook和after_hook復制了Before('〜@ mass_benchmark')和After('〜@ mass_benchmark')鈎子(實際上只是調用相同的方法)。

變量$ seconds_taken在我要為其計時的特定區域周圍設置。 我不是在安排整個測試的時間,只是其中的關鍵部分。 測試的其余部分已經到了該點,依此類推,這不是計時部分的一部分,因此我不能只將計時部分移到該點之外。

問題可能出在我在這些方法中正在做的事情,但是據我所知,一切正常(如放置正確的puts語句所示)。 任何想法表示贊賞!

當前,Cucumber似乎不支持在環繞鈎中兩次調用該塊。 以下功能文件可以證明這一點:

Feature: This scenario will print a line

  Scenario: Print a line
    When I print a line

和步驟定義:

Around do |scenario, block|
  Kernel.puts "START AROUND, status=#{scenario.status}"
  block.call
  Kernel.puts "BETWEEN CALLS, status=#{scenario.status}"
  block.call
  Kernel.puts "END AROUND, status=#{scenario.status}"
end

When /^I print a line$/ do
  Kernel.puts "IN THE STEP DEFINITION"
end

執行此操作后,黃瓜將打印:

  Scenario: Print line  # features/test1.feature:3
START AROUND, status=skipped
IN THE STEP DEFINITION
    When I print a line # features/test.rb:9
BETWEEN CALLS, status=passed
    When I print a line # features/test.rb:9
END AROUND, status=passed

顯然,由於方案的狀態已經“通過”,所以Cucumber不會重新執行它,盡管輸出格式化程序已接收到這些步驟。 我沒有找到任何方法來“重置”方案API中的狀態以使其重新運行。

圍繞鈎子還存在其他問題,例如,您不能在圍繞鈎子中將變量設置為World(就像您可以在before鈎子中一樣)。 有關更多血腥細節,另請參閱黃瓜問題52116

一種可能是保持傳入的塊不變,並在重復項上調用“ .call”方法? 像(未經測試的):

Around do |scenario, block|
  30.times do
    duplicate = block.dup
    before_hook(scenario)
    duplicate.call
    after_hook(scenario)
  end
end

只需確保不要在塊上使用“ .clone”,因為克隆會創建一個具有相同ID的對象,從而導致對副本所做的每次更改也會影響原始對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM