Laravel База данных Тестирование различных результатов из базы данных и API - PullRequest
1 голос
/ 02 марта 2020

У меня проблема с тестированием функций в Laravel. У меня есть стандартный CRUD (Json API) для модели проекта, и я хочу обновить данные проекта.

В Postman все работает хорошо, но когда я запускаю тест, метод PATCH работает как положено, но когда я использую Метод GET, данные выглядят так, как будто они не были обновлены. Более того, когда я получаю данные проекта из базы данных, они выглядят обновленными.

Поэтому моя проблема в том, что после использования метода PATCH в модели проекта данные в базе данных обновляются, но когда я использую метод GET (только в этом тест) Я все еще получаю старые данные вместо обновленных.

Таблица проекта

       Schema::create('projects', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name')->unique();
            $table->text('description')->nullable();
            $table->unsignedBigInteger('created_by');
            $table->timestamps();

            $table->foreign('created_by')
                ->references('id')->on('users');
        });

Контроллер проекта

class ProjectController extends Controller
{

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $projects = Auth::user()->projects;

        return JsonResponse::sendSuccessResponse($projects->toArray());
    }


    /**
     * Update the specified resource in storage.
     *
     * @param  UpdateProject  $request
     * @param  Project $project
     * @return \Illuminate\Http\Response
     */
    public function update(UpdateProject $request, Project $project)
    {
        $this->authorize('update', $project);

        $request->validated();
        $project->fill(request(['name', 'description']));
        $project->save();

        $project->assigned_users()->sync(request('assigned_users'));
        $project->assigned_users()->syncWithoutDetaching(Auth::user()->id);

        return JsonResponse::sendSuccessResponse($project->toArray());
    }
}

Запрос UpdateProject

class UpdateProject extends FormRequest
{
    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => ['required', 'string', 'max:255', 'unique:projects,name,' . $this->project->id],
            'description' => ['string'],
            'assigned_users' => ['exists:users,id'],
            'assigned_users.*' => ['distinct']
        ];
    }
}

IndexProjectTest

Список всех работ по тестированию проекта.

//WORKS WELL
class IndexProjectTest extends ProjectTestCase
{

     use RefreshDatabase;
    /** @test */
    public function user_can_see_projects_assigned_to_him()
    {

        $project = factory(Project::class)->create();
        $project->assigned_users()->attach($this->user);

        $this->seeProjectInIndexRoute($project);
    }
}

UpdateProjectTest

class UpdateProjectTest extends TestCase
{
    use RefreshDatabase;

    /** @test */
    public function user_can_update_project_that_is_assigned_to_him()
    {
        $project = factory(Project::class)->create();
        $project->assigned_users()->attach($this->user);

        $newProjectData = factory(Project::class)->make();

        $response = $this->patchJson('api/projects/' . $project->id, [
            'name' => $newProjectData->name,
            'description' => $newProjectData->description
        ]);

        $response
            ->assertStatus(200)
            ->assertJsonStructure([
                'success',
                'data' => [
                    'created_at',
                    'created_by',
                    'description',
                    'id',
                    'name'
                ],
            ])
            ->assertJsonMissingValidationErrors(
                [
                    'name'
                ]
            )
            ->assertJsonFragment([
                'name' => $newProjectData->name,
                'description' => $newProjectData->description
            ]);


        $response = $this->getJson('api/projects');

        dd([
            'inList' => $response->getData()->data[0]->name,
            'toWhatWeWantedToChange' => $newProjectData->name,
            'database' => Project::all()->first()->name,
            'descriptionBeforeChange' => $project->name,
            'usersProjects' => $this->user->projects->first()->name
        ]);
    }

Возврат с консоли

$ ./vendor/bin/phpunit
PHPUnit 8.5.2 by Sebastian Bergmann and contributors.

array:5 [
  "inList" => "atque"
  "toWhatWeWantedToChange" => "earum"
  "database" => "earum"
  "descriptionBeforeChange" => "atque"
  "usersProjects" => "earum"
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...