Behat + Laravel. Сценарий сбой, так как перенаправление, кажется, не происходит

Я пытаюсь освоить использование Behat и Laravel 5. У меня есть простой сценарий, который включает в себя создание сообщения:

Scenario: Post Creation
Given I have an account "john" "john@example.com"When I create a post "Example Post" "Example Content"Then I should see a post "Example Post"

В контексте контекста я определил «создание» и «просмотр» сообщения следующим образом:

/**
* @When I create a post :title :content
* @param $title string
* @param $content string
*/
public function iCreateAPost($title, $content)
{
$this->visit('admin/posts/create');
$this->fillField('title', $title);
$this->fillField('slug', \Str::slug($title));
$this->fillField('content', $content);
$this->pressButton('Create Post');
$this->printCurrentUrl();

}

/**
* @Then I should see a post :title
* @param $title
*/
public function iShouldSeeAPost($title)
{
$this->visit('admin/posts');
$this->printCurrentUrl();
$this->assertPageContainsText($title);
}

Если я сам выполняю эти шаги через браузер, все работает нормально. Однако мой iShouldSeeAPost тест не пройден

После дальнейшей проверки admin/posts страница посещена, но не содержит недавно добавленного сообщения. Я работал задом наперед и обнаружил, что в конце iCreateAPost Метод текущий URL является тот, который соответствует store метод моего контроллера, когда на самом деле контроллер перенаправляет на admin/posts/edit стр. Так что, должно быть, что-то не так сразу после pressButton('Create Post') действие.

Как я могу отладить это? Кажется, я не могу найти лучшего способа просмотра потока запросов и ответов, кроме printLastResponse который не очень полезен. Я не думаю, что это проблема проверки, и мои другие тесты функций предполагают, что это не проблема базы данных.

Для справки вот тестовый вывод:

  Scenario: Post Creation                                 # features/posts.feature:6
Given I have an account "john" "john@example.com"     # FeatureContext::iHaveAnAccount()
When I create a post "Example Post" "Example Content" # FeatureContext::iCreateAPost()
│ http://localhost/admin/posts/store
Then I should see a post "Example Post"               # FeatureContext::iShouldSeeAPost()
│ http://localhost/admin/posts
The text "Example Post" was not found anywhere in the text of the current page. (Behat\Mink\Exception\ResponseTextException)

--- Failed scenarios:

features/posts.feature:6

1 scenario (1 failed)
3 steps (2 passed, 1 failed)

Обновить

Все еще не повезло с этим. Это тестирование самой основной задачи CRUD, и я не могу понять это.

Вот метод хранения на контроллере. Я использую инъекцию зависимостей Laravel для проверки запроса и хранения сообщения.

public function store(Post $post, CreatePostRequest $request)
{
$post = $post->create($request->all());
return redirect()->route('admin.posts.edit', [$post->id])
->with(['alert' => 'Post saved', 'alert-class' => 'success']);
}

Когда я использую $this->printLastResponse(); в моем тесте я, кажется, получаю очень мало вывода, обычно только URL. Кажется, метод store на контроллере не работает как
iShouldSeeAPost() действительно выводит html страницы индекса, но запись не была сохранена.

Как я уже сказал, если я провожу тест вручную, он будет работать как положено.

соответствующие файлы:

https://github.com/harrygr/Creuset/blob/master/features/bootstrap/FeatureContext.php
https://github.com/harrygr/Creuset/blob/master/app/Http/Controllers/Admin/PostsController.php
https://github.com/harrygr/Creuset/blob/master/app/Http/Requests/CreatePostRequest.php

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector