【问题标题】:How to pass function as argument如何将函数作为参数传递
【发布时间】:2014-06-29 00:56:05
【问题描述】:

这是我的规范助手之一:

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

我希望能够以某种方式将click_button("baz") 作为它的最后一个参数(lambda?)传递,而不是调用它remove_slides_from_page(@foo, @bar, "baz")。我想请你帮忙,因为我不知道如何用 Ruby 制作它。

【问题讨论】:

标签: ruby-on-rails ruby rspec capybara


【解决方案1】:

使用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') }

【讨论】:

  • 我发现yield 非常混乱.. 尤其是yield 函数的调用方式。
猜你喜欢
  • 1970-01-01
  • 2021-01-14
  • 2016-07-23
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
相关资源
最近更新 更多