Получить все элементы внутри кавычек в определении шага огурца

У меня есть строка: I attach "dog.png", "cat.png", and "alphabet.doc"

Это то, что я хочу сопоставить:

1. dog.png
2. cat.png
3. alphabet.doc

Я могу сделать это, выполнив "([^"]*)", однако строка должна начинаться с «Я прикрепляю».

Это текущее правило, которое у меня есть в определении шага: /^I attach "([^"]*)"$/, но оно не работает.

Это для огурцов/корнишонов, я могу кое-что понять, используя scan, но я не думаю, что вы можете использовать это в огурцах/корнишонах?

Любые предложения о том, как это сделать?

Спасибо


person jreptak    schedule 08.08.2013    source источник
comment
Вы не думаете, что можете использовать scan?   -  person pguardiario    schedule 08.08.2013
comment
@pguardiario Эти правила предназначены для определения шагов   -  person jreptak    schedule 08.08.2013


Ответы (2)


Если вы хотите зафиксировать переменное количество входных данных за один шаг, я думаю, что лучший вариант — использовать scan. Хотя вы не можете использовать сканирование непосредственно в имени шага, вы можете получить полный список файлов, а затем проанализировать полученный результат.

Попробуйте следующее определение шага:

Given /^I attach (.*)$/ do |file_list|
  files = file_list.scan(/"(.+?)"/).flatten
  #=> ["dog.png", "cat.png", "alphabet.doc"]
end

Это создаст массив файлов для прикрепления. Он может обрабатывать файлы от 1 до бесконечности.

person Justin Ko    schedule 10.08.2013
comment
Это круто. Мне было интересно, как использовать сканирование в этом контексте. У меня была аналогичная потребность в ОП, и это помогает. +1 - person Richard Jordan; 12.08.2013

Кажется, это хорошее место для использования псевдонима #And.

Given I attach dog.png
  And I attach cat.png
  And I attach alphabet.doc
...

В качестве альтернативы вы можете использовать таблицы данных для простых многострочных аргументов.

person Travis Kaufman    schedule 08.08.2013