使用Rspec匹配器的DRY代码

时间:2015-06-13 16:19:27

标签: ruby rspec

我想改进以下代码块以使其更具可读性/简洁性/ DRY(我的实际参数对#have_css来说有点复杂):

negate ? expect(page).to(have_css('selector', text: 'text')): expect(page).to_not(have_css('selector', text: 'text'))

是否有将'selector', text: 'text'存储在变量中以作为方法参数重用?

或者是否有一些特殊技巧我只能根据我的negate布尔值调用正确的匹配器?也许类似于

expectation = negate ? :should_not : :should
page.send(expectation, have_css('selector', text: 'text'))`

但使用新的Rspec期望语法?

1 个答案:

答案 0 :(得分:2)

您可以将参数存储在数组中多次使用,然后将它们展开(*)到参数列表中:

css_args = ['selector', {text: 'text'}]
expect(page).to(have_css(*css_args))

你也可以选择negate匹配你的匹配器:

expectation = negate ? :to_not : :to
expect(page).send(expectation, have_css('selector', text: 'text'))