2015-10-19 99 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对其进行处理。然后,您可以从您的步骤中调用该帮助程序代码。 –