Ich bin nur lernen Behat so Entschuldigungen, wenn dies ziemlich einfach ist. Ich habe Szenarien wie folgt aus:Wie URL zu ersetzen und Daten in behath
Scenario: Create Task
Given I have the JSON payload:
"""
{
"task_list_id" : 3,
"title" : "From Behat",
"display_order" : 1
}
"""
When I send a POST request to task
Then one SQL ident is created
Scenario: Get the Task
When I send a GET request to "tasklist/{id}/tasks"
Then The response code should be 200
And The response content type should be "application/json"
Das erste Szenario stellt die Verbindung und dann JSON kommt zurück mit einem ganzzahligen Wert. Ich möchte nun , dass Wert in das nächste Szenario ersetzt werden, wo die URL den Platzhalter {ID} hat.
Ich habe versucht, $ this-> Ausgabe auf den Körper (die zurückgegebene Ganzzahl) in der Datei FeatureContext.php für das erste Szenario, und dann eine preg_replace in der Sekunde, um {id} zu der ganzen Zahl zu ändern. Es scheint, dass wenn das zweite Szenario ausgeführt wird, die Ausgabe ausgeblendet wird, bevor das Szenario aufgerufen wird.
sind meine Kontext Methoden für die oben sind:
/**
* @Then One SQL ident is created
*/
public function theResponseBodyShouldBeAnInteger() {
$this->theResponseContentTypeShouldBe('application/json');
$this->theResponseCodeShouldBe(201);
$body = $this->response->getBody()->getContents();
if (!ctype_digit($body)) {
throw New Exception(sprintf('Expected integer response but got "%s".', $body));
}
$this->output = $body;
echo "Output is '$this->output'\n";
}
/**
* @When I send a :method request to :uri
*
* @param $method
* @param $uri
*/
public function iSendARequestTo($method, $uri)
{
echo "Output is '$this->output'\n";
$uri = str_replace('{id}', $this->output, $uri);
try {
if ($method == 'POST' || $method == 'PATCH') {
$this->response = $this->client->request($method, $uri, ['json' => $this->requestPayload]);
} else {
$this->response = $this->client->request($method, $uri);
}
} catch (GuzzleHttp\Exception\ClientException $ex) {
throw new Exception($uri . "\n" . $ex->getResponse()->getBody()->getContents());
}
}
Ok, also lass mich das anders fragen. Ich teste meine API, also sagt das erste Szenario, ein Objekt mit bestimmten Daten zu erstellen. Mein nächstes Szenario möchte daher das neu erstellte Objekt abfragen und bestätigen, dass das, was gespeichert wurde, das ist, was ich gesendet habe. – Gargoyle
Danke, Ihre aktualisierten Beispiele machen Sinn. Schätze die Hilfe. – Gargoyle
OK, immer noch ein wenig zu kämpfen. Nehmen wir an, ich teste meine "Task" API. Aufgaben müssen in einer 'taskList' leben. Um eine Aufgabe zu erstellen, muss ich eine Aufgabenliste erstellt haben. Das bedeutet, dass jedes Szenario, in dem ich etwas mit einer Aufgabe machen möchte, zuerst eine Aufgabenliste erstellen muss, damit ich die Aufgabe erstellen und meine Tests dann gegen die Aufgabe durchführen kann. Das macht keinen Sinn. Ich konnte keine TaskList für die gesamte Feature-Datei erstellen und diese dann verwenden. – Gargoyle