Laravel контроллер тестирования phpunit, который возвращает представление с данными - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь настроить TDD на laravel, но у меня возникают проблемы с тестовым контроллером, который запрашивает коллекцию записей и возвращает представление с данными, когда я запускаю свой тест, он возвращает сообщение об ошибке, которое пытается получить идентификатор undefined свойство

// мой тест

namespace Tests\Unit;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;


class JobApplicationTest extends TestCase
{
use WithoutMiddleware;
/** @test */
public function user_can_see_all_open_positions()
{
    // when user visit apply for a job page
    $this->withoutExceptionHandling();
   $response = $this->get(route('positions.open'));
   $response->assertSuccessful();
   $response->assertViewIs('positions.open.index');
   $response->assertViewHas('positions');
}


}

// My controller

 public function open(Request $request)
{

    //TODO support additional filters & searches

    //initialize query
    $query = Position::query()->which()->are()->open();

    //paginate query result
    $positions = $query->paginate(config('app.defaults.pageSize'));

    $data = [
        'route_title' => 'Open Job Positions',
        'route_description' => 'Available Job Positions',
        'positions' => $positions,
    ];

    return view('positions.open.index', $data);
}

, поэтому проблема в том, что когда я запускаю текст, он выглядит как представление возвращается без данных, в то время как представление ссылается на данные, возвращаемые в контроллер

сообщение об ошибке при запуске test

1) Tests \ Unit \ JobApplicationTest :: user_can_see_all_open_positions ErrorException: попытка получить свойство 'id' не-объекта (View: / var / www/html/ipf-projects/niajiri/resources/views/pos itions / open / index. клинок. php)


<h3> 
    <a href="{{ route('positions.preview', [
        'id'   => $position->id,
        'slug' => str_slug($position->title)
    ]) }}" class="text-navy"> 
         {!! $position->title !!} - {!! $position->organization->name !!} 
    </a>
</h3>

1 Ответ

0 голосов
/ 21 января 2020

В 'positions.open.index' он пытается получить доступ к свойству id для необъекта.

Это может быть связано с тем, что ваш $query не возвращает никаких Position объектов (т. Е. $data->positions) возвращает пустое значение Collection)

При выполнении модульных тестов вполне вероятно, что он создает временную базу данных (sqlite по умолчанию), которая не будет заполнена какими-либо данными. Попробуйте добавить несколько Position в ваш тест, например:

/** @test */
public function user_can_see_all_open_positions()
{
   // Create Positions
   Position::create([/* Some data here */]);
   Position::create([/* Some data here */]);

   // when user visit apply for a job page
   $this->withoutExceptionHandling();
   $response = $this->get(route('positions.open'));
   $response->assertSuccessful();
   $response->assertViewIs('positions.open.index');
   $response->assertViewHas('positions');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...