2015-10-19 93 views
0

我是新來的黃瓜/水豚,我想知道我如何導入使用黃瓜/水豚如何使用Cucumber/Capybara從txt/xls文件導入數據?

比如我需要使用下一個場景來上傳多個文件相繼從TXT/XLS文件中的數據:

功能

Scenario: Upload 
    When I Choose A name "name" 
    When I Choose "/home/path" 
    Then I Click Upload 

step_definitions

When(/^I Choose A name "([^"]*)"$/) do |title| 
    fill_in('video_title', :with => title) 
    fill_in('video_description', :with => title) 
end 

When(/^I Choose "([^"]*)"$/) do |file| 
    find(:xpath, '//*[@id="file"]', :visible => false).set(file) 
end 

Then(/^I Click Upload$/) do 
    click_button('Upload') 
end 

所以,如果我可以添加步驟定義從導入TXT或xls這將是更容易,然後重複每個文件場景

回答

1

我不知道我理解你的問題。爲了澄清,你是否說你想爲幾個文件做同樣的基本事情?如果是這樣,這是我會怎麼做:

特點:

Scenario Outline: Upload 
    When I upload a video named "<name>" from path "<path>" 

    Examples: 
    | name | path   | 
    | foo | /path/1  | 
    | bar | /path/2  | 
    | baz | /path/3  | 

步驟:

When(/^I choose a name "(.*)"$/) do |name| 
    fill_in('video_title', :with => name) 
    fill_in('video_description', :with => name) 
end 

When(/^I choose "([^"]*"$/) do |file| 
    find(:xpath, '//*[@id="file"]', :visible => false).set(file) 
end 

When(/^I click "([^"]*"$/ do |button| 
    click_button(button) 
end 

When(/^I upload a video named "[^"]*" from path "[^"]*"$/ do |title, path| 
    step 'I choose a name "' + title + '"' 
    step 'I choose "' + path + '"' 
    step 'I click "Upload"' 
end 

這是假設你使用一些其他方案中的其他步驟。如果您不是,則只需定義「從路徑」「'上傳名爲」「的視頻即可。

如果這不能回答你的問題,請讓我知道你需要什麼不同,我會看看我是否可以幫忙。

+0

你很近,但我想從外部文件導入數據? ,你剛做的手術名稱是什麼? –

+1

我會先回答你的第二個問題,因爲它是最簡單的。首先,我使用了場景大綱而不是常規場景。這可以讓您包含任意數量的不同數據點。接下來,我使用'step'關鍵字來調用第四個關鍵字的三個步驟定義。這兩種方法都是減少重複的好方法。 –

+1

至於你的第一個問題,你爲什麼需要測試許多不同的數據點?在大多數情況下,這並不是必須的,所以我通常建議將更少的例子放入場景提綱中(如我所說,這個提綱仍然可以是任意長的)。如果有某些原因絕對不是可接受的選項,那麼我會創建一個輔助模塊(將其保存在您的'features/support'目錄中),以便從文件中提取數據並使用常規Ruby對其進行處理。然後,您可以從您的步驟中調用該幫助程序代碼。 –