Pregunta

Estoy usando Pepino para enviar en JSON para algunas acciones de la API. En un caso, necesito saber el ID de un objeto que fue construida antes de la llamada a la API y pasar ese ID en.

Quiero hacer esto:

  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

Lo que no funciona, ya que la cadena """ hace las variables prescinde de ella como una cadena entre comillas dobles haría. El paso I have already built a document construye el objeto @document, así que no sé de antemano lo que va a ser mi ID. Si importa, estoy usando MongoDB con MongoId, y mis esfuerzos para establecer manualmente una identificación han sido infructuosos.

¿Hay una manera limpia para lograr esto?

Medio ambiente:

ruby: 1.8.7
rails: 3.0.1
cucumber: 0.9.4
cucumber-rails: 0.3.2
¿Fue útil?

Solución

Cambiar a la sintaxis ERB (<%= ... %>), y luego en su definición de paso, ejecute la cadena a través de ERB:

require 'erb'

When %r{^I POST (.+) with data:$} do |path, data_str|
  data = ERB.new(data_str).result(binding)
  # ...
end

Otros consejos

ERB es una forma de evaluación Defer, pero tal vez, Theo, esto es un poco más limpio?

Las dos mitades de esto son el lado escenario:

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

Y al lado del paso de definición:

When %r{^I POST (.+) with data:$} do |path, data_str|
  # assuming @document is in scope...
  data = eval(data_str)
  # ...
end

Yo recomendaría el uso de esquemas y ejemplos de escenarios utilizando algo así como

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     |

en los ejemplos. Eso que quede claro que los valores provienen de al menos. Control de sustitución en el escenario contornos aquí http://cukes.info/step-definitions.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top