Рубиновые огурцы многострочные кавычки с интерполяцией? - PullRequest
2 голосов
/ 07 декабря 2010

Я использую Cucumber для отправки в JSON некоторых действий API.В одном случае мне нужно знать идентификатор объекта, который был построен до вызова API, и передать этот идентификатор.

Я хочу сделать это:

  Scenario: Creating a print from an existing document
    Given I am logged in as "foo@localhost.localdomain"
      And I have already built a document
     When I POST /api/prints with data:
       """
       {
         "documentId":"#{@document.id}",
         "foo":"bar",
         "etc":"etc" 
       }
       """
     Then check things

Какой нене работает, потому что строка """ не интерполирует переменные, как в строке в двойных кавычках.Шаг I have already built a document создает объект @document, поэтому я не знаю заранее, каким будет мой идентификатор.Если это имеет значение, я использую MongoDB с mongoid, и мои попытки вручную установить ID оказались бесплодными.

Есть ли чистый способ сделать это?

Среда:

ruby: 1.8.7
rails: 3.0.1
cucumber: 0.9.4
cucumber-rails: 0.3.2

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Изменить на синтаксис ERB (<%= ... %>), а затем в определении шага введите строку через ERB:

require 'erb'

When %r{^I POST (.+) with data:$} do |path, data_str|
  data = ERB.new(data_str).result(binding)
  # ...
end
2 голосов
/ 07 декабря 2010

ERB - это один из способов отложить оценку, но, возможно, Тео, это немного чище?

Две половины этого - сторона сценария:

Scenario: Creating a print from an existing document
  Given I am logged in as "foo@localhost.localdomain"
    And I have already built a document
  When I POST /api/prints with data:
   # outer, single quotes defer evaluation of #{@document}
   '{
     "documentId":"#{@document.id}",
     "foo":"bar",
     "etc":"etc" 
   }'
 Then check things

И сторона определения шага:

When %r{^I POST (.+) with data:$} do |path, data_str|
  # assuming @document is in scope...
  data = eval(data_str)
  # ...
end
1 голос
/ 26 июня 2014

Я бы порекомендовал использовать схемы сценариев и примеры, используя что-то вроде

Scenario Outline: Posting stuff
....
When I POST /api/prints with data:
   """
   {
     "documentId": <document_id>,
     "foo":"bar",
     "etc":"etc" 
   }
   """
Then check things

Examples: Valid document
| document_id |
| 1234566     |

Examples: Invalid document
| document_id |
| 6666666     |

в примерах. Это дало бы понять, откуда взялись значения, по крайней мере. Проверьте Подстановку в Сценарии Схемы здесь http://cukes.info/step-definitions.html

...