2013-10-10 76 views
0

我非常喜歡Ruby和Cucumber自動化,我正嘗試自動化一個基本的遊戲。紅寶石和黃瓜 - 重構一長串行動

該遊戲有大約200種產品,我正在運行一個測試,逐個檢查這些產品是否已啓用。

prod1 = check_product '#product1.product' 
    prod1.click unless prod1.nil? 
    prod2 = check_product '#product2.product' 
    prod2.click unless prod2.nil? 
    prod3 = check_product '#product3.product' 
    prod3.click unless prod3.nil? 

我的問題是我不想列出代表產品的200行代碼。我覺得我應該只需要一行代碼用'x'代替產品編號,並告訴它用1..200代替x。

喜歡的東西: -

x = 1..200 
     prod[x] = check_product '#product[x].product' 
     prod[x].click unless prod[x].nil? 

我知道這是可怕的錯誤,但我希望它證明了我的意思。

有沒有一種很好的方式來做我在問什麼?

對可能非常基本的問題和可怕的代碼抱歉。我真的是剛學此刻的繩索:-)

=====

要更新下面的解決方案工作一種享受。我的代碼現在讀取: -

def product_skips_check 
    n = 9 
    products = [] 
    (0..n).each do |i| 
    products[i] = check_product "#product#{i}.product" 
    products[i].click unless products[i].nil? 
    end 
end 

非常感謝:-)

回答

1

所有答覆如果check_product方法接受一個字符串,你可以使用插值。在雙引號字符串中,#{}中的所有內容都將被解釋並作爲普通的ruby代碼執行,並且結果將使用其to_s方法轉換爲字符串。

n = 300 
products = [] 
(0..n).each do |i| 
    products[i] = check_product "#product#{i+1}.product" 
    products[i].click unless prod[i].nil? 
end 

請務必使用雙引號,但插值在單引號字符串中不起作用。

編輯:改變了代碼,使更有意義

+0

謝謝:-)我會給它一個旋風! –

+0

如果它對你有用@ JackMarshall-Arts,請你可以通過點擊下面的勾號來接受我的答案嗎?謝謝! – charrison