Reputation: 3573
This is one of my spec helpers:
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
Instead of calling it remove_slides_from_page(@foo, @bar, "baz")
I wish to be able to pass click_button("baz")
as its last argument (lambda?) somehow. I want to ask you for help as I have no clue how to make it in Ruby.
Upvotes: 0
Views: 97
Reputation: 37409
Use 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') }
Upvotes: 2