Domanda

sto usando cetriolo di inviare in JSON ad alcune azioni API. In un caso, devo conoscere l'ID di un oggetto che è stato costruito prima della chiamata API e passare tale ID in.

Voglio fare questo:

  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

che non funziona, perché la stringa """ non variabili non interpolazione come una corda di virgolette doppie avrebbe fatto. Il passo I have already built a document costruisce l'oggetto @document, quindi non so in anticipo ciò che il mio ID sarà. Se è importante, sto usando MongoDB con mongoid, ed i miei sforzi per impostare manualmente un ID hanno dimostrato inutile.

C'è un modo pulito per ottenere questo risultato?

Ambiente:

ruby: 1.8.7
rails: 3.0.1
cucumber: 0.9.4
cucumber-rails: 0.3.2
È stato utile?

Soluzione

Passare alla sintassi ERB (<%= ... %>), e quindi nella definizione fase, eseguire la stringa attraverso ERB:

require 'erb'

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

Altri suggerimenti

ERB è un modo per la valutazione rinviare, ma forse, Theo, questo è un po 'più pulito?

Le due metà di questo sono il lato scenario:

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

E il lato definizione step:

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

Ti consiglio di utilizzare profili di scenario e gli esempi che utilizzano qualcosa come

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     |

negli esempi. Che renderebbe chiaro dove i valori provenienti da almeno. Controllare Sostituzione Nello scenario delinea qui http://cukes.info/step-definitions.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top