Laravel тест не пройден - PullRequest
       20

Laravel тест не пройден

3 голосов
/ 25 апреля 2020

Итак, я учусь делать тесты для своего приложения и один из тестов, которые он не хочет проходить, и вот это логика c: В основном, когда пользователь запрашивает домашнюю страницу, я ожидаю, что Счетчик списка базы данных будет равен 0, и это пройдено, тогда я ожидаю также, что сеанс имеет ключ ошибки NoBook, и здесь происходит сбой. это код, который я пробовал:

class BookDisplayManagmentTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function Show_error_message_when_there_is_no_book_to_display_in_index_page()
    {
        //Request the home page
        $response = $this->get(route('home'));

        // I expect the count on the database book equal 0
        $this->assertCount(0, book::all());

        //Then I also expect that the session will flash an error with key NoBook
        $response->assertSessionHasErrors('NoBook');
    }

}

Но проблема, я получаю эту ошибку:

Session is missing expected key [errors]. Failed asserting that false is true.

И код, который добавляет ошибку сеанса:

<?php

namespace App\Http\Controllers;

use App\Books;
use Illuminate\Http\Request;

class IndexController extends Controller
{
      /** @show index function */
        public function index()
        {
            $book = Books::paginate(7);
            if(!$book->count())
            {
                session()->now('NoBook','There is no books at the moment');
            }
            return view('index', compact('book'));
        }
}

1 Ответ

2 голосов
/ 25 апреля 2020

Вы используете session(), который добавляет ключ к сеансу, который не является ключом ошибки .

Следовательно, поскольку вы не передаете ошибку от своего контроллера - тогда ваш тест "успешно" не проходит.

Если вы хотите передать ошибку в сеанс, вы должны использовать MessageBag, например, используя следующий код:

      /** @show index function */
        public function index()
        {
            $book = Books::paginate(7);
            $errors = [];

            if(!$book->count())
            {
                $errors['NoBook'] = 'There is no books at the moment';
            }
            return view('index', compact('book'))->withErrors($errors);
        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...