这是我的规范助手之一:
def remove_slides_from_page(to_delete_array, to_leave_array, button_name)
to_delete_array.map { |slide|
page.check("slide_select_#{slide.id}")
}
click_button(button_name) # <- I would like to pass this command(s) as an argument
to_leave_array.map { |slide|
expect(page).to have_selector("tr#slide_#{slide.id}")
expect(page).to have_field("slide_select_#{slide.id}")
expect(page).to have_field("slide_delete_#{slide.id}", visible: false)
expect(page).to have_field("slide_move_#{slide.id}", visible: false)
}
to_delete_array.map {|slide|
expect(page).to_not have_selector("tr#slide_#{slide.id}")
expect(page).to_not have_field("slide_select_#{slide.id}")
expect(page).to_not have_field("slide_delete_#{slide.id}")
expect(page).to_not have_field("slide_move_#{slide.id}")
}
end
我希望能够以某种方式传递remove_slides_from_page(@foo, @bar, "baz")
作为其最后一个参数(lambda?),而不是调用它click_button("baz")
。我想请你帮忙,因为我不知道如何在Ruby中制作它。
答案 0 :(得分:2)
使用yield
:
def remove_slides_from_page(to_delete_array, to_leave_array)
to_delete_array.map { |slide|
page.check("slide_select_#{slide.id}")
}
yield
to_leave_array.map { |slide|
expect(page).to have_selector("tr#slide_#{slide.id}")
expect(page).to have_field("slide_select_#{slide.id}")
expect(page).to have_field("slide_delete_#{slide.id}", visible: false)
expect(page).to have_field("slide_move_#{slide.id}", visible: false)
}
to_delete_array.map {|slide|
expect(page).to_not have_selector("tr#slide_#{slide.id}")
expect(page).to_not have_field("slide_select_#{slide.id}")
expect(page).to_not have_field("slide_delete_#{slide.id}")
expect(page).to_not have_field("slide_move_#{slide.id}")
}
end
remove_slides_from_page(to_delete_array, to_leace_array) { click_button('baz') }