我有一个表单,我使用page-object gem填充populate_page_with data_for。它是这样定义的:
def add_fruit(data = {})
populate_page_with data_for(:new_fruit, data)
add_fruit_submit
end
然后我按照这样的方式调用方法:
on(AddFruitPage).add_fruit
我的yml文件如下所示:
new_fruit:
color: red
size: large
type: apple
price: 0.75
...
another_fruit
color: orange
size: medium
type: orange
price: 0.99
...
我知道我可以通过在我的步骤中执行以下操作来覆盖每个字段:
When(^/I add a banana$/) do
on(AddFruitPage).add_fruit('color' => 'yellow', 'size' => 'small', 'type' => 'banana')
end
由于另一个水果的数据已经存在于yml文件中,我可以使用参数告诉方法要加载哪些数据,而不是在使用方法时必须指定每个值吗?类似的东西:
def add_fruit(data = {})
if(data['type'] == 'another')
populate_page_with data_for(:new_fruit, data)
else
populate_page_with data_for(:another_fruit, data)
end
end
这样称呼它?
on(AddFruitPage).add_fruit('type' => 'another')
Type是一个可选参数,仅用于加载另一组数据。颜色,大小,类型和价格都映射到页面中在类中定义的文本字段。可以这样做吗?
答案 0 :(得分:0)
如果您使用的是Ruby 2,则可以使用命名参数 - 为fruit类型创建命名参数,将其余参数创建为数据数组的一部分。
我可能会使用一个指定data_for
的第一个参数的参数,而不是使用已存在于数据中的“类型”。方法定义只是:
def add_fruit(fruit_type: :new_fruit, **data)
populate_page_with data_for(fruit_type, data)
add_fruit_submit
end
可以通过多种方式调用:
add_fruit() # Specify nothing
add_fruit(:color => 'red') # Just specify the data
add_fruit(:fruit_type => :another_fruit) # Just specify the fruit type
add_fruit(:fruit_type => :another_fruit, :color => 'red') # Specify fruit type and data
如果您使用的是Ruby 2之前的版本,则可以执行以下操作:
def add_fruit(data = {})
fruit_type = data.delete(:fruit_type) || :new_fruit
populate_page_with data_for(fruit_type, data)
add_fruit_submit
end