Rubino Cetriolo citazioni multilinea con interpolazione?
-
09-10-2019 - |
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
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