Я просто изучаю, что так извиняюсь, если это довольно просто. У меня есть сценарий, как это:Как заменить URL и передавать данные в behat
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"
Таким образом, первый сценарий делает соединение, а затем JSON возвращается с целочисленным значением. Теперь я хочу, чтобы значение было заменено на следующий сценарий, где URL-адрес имеет местозаполнитель {id}.
Я попытался установить $ this-> output в тело (возвращаемое целое число) в файле FeatureContext.php для первого сценария, а затем сделал preg_replace во втором, чтобы изменить {id} на целое число. Похоже, что при запуске второго сценария вывод завершается до вызова этого сценария.
Это мои методы контекст выше:
/**
* @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());
}
}
Хорошо, позвольте мне спросить об этом по-другому. Я тестирую свой API, поэтому в первом сценарии создается объект с конкретными данными. Поэтому мой следующий сценарий хочет запросить вновь созданный объект и подтвердить, что то, что было сохранено, - это то, что я отправил. – Gargoyle
Спасибо, ваши обновленные примеры имеют смысл. Цените помощь. – Gargoyle
Хорошо, все еще немного борется. Скажем, я тестирую API 'task'. Задачи должны находиться внутри 'taskList'. Поэтому, чтобы создать задачу, я должен был создать список задач. Это означает, что каждый сценарий, в котором я хочу что-то сделать с задачей, должен сначала создать список задач, чтобы я мог создать задачу, а затем выполнить мои тесты против этой задачи? Это не имеет смысла, я не мог создать TaskList для всего файла функций, а затем использовать его. – Gargoyle