2015-06-13 4 views
0

Я хочу улучшить следующий блок кода, чтобы быть более удобным для чтения/лаконичным/DRY (мои фактические аргументы немного сложнее #have_css):DRY код с помощью RSpec matchers

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 ожидать?

ответ

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')) 
+0

Извините, что ваш вопрос дня так прост ... – Adam

+0

Есть огромная вариация, я рад помочь :) –

Смежные вопросы