Автоматизированные тесты при ошибках создания объектов jenkins с использованием Laravel phpunit - PullRequest
0 голосов
/ 05 февраля 2020

Я запускаю автоматические тесты в jenkins на сервере aws linux, используя nginx и php7 .3. При выполнении тестов я получаю следующие ошибки

    1) Tests\Feature\admin\EventManagementTest::test_admin_can_edit_event_and_view_in_event_list
Error: Call to a member function path() on null

/var/lib/jenkins/workspace/answers-integration/tests/Feature/admin/EventManagementTest.php:134

2) Tests\Feature\admin\EventManagementTest::test_admin_can_soft_delete_event_and_does_not_appear_on_event_list
Error: Call to a member function path() on null

/var/lib/jenkins/workspace/answers-integration/tests/Feature/admin/EventManagementTest.php:190

Путь к функции () находится в моей модели событий

В моей локальной среде все работает нормально. Каждый тест проходит

Объекты не создаются, и я понятия не имею, почему

В следующем коде не удается создать экземпляр объекта с красноречивым запросом

 $event = Event::with('event_categories', 'event_topics')->find(1);

Это происходит с большинством моих тестов. Ниже приведен полный тестовый код

namespace Tests\Feature\admin;

use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\DB;
use Tests\TestCase;
use \App\Event;

class EventManagementTest extends TestCase
{
    use WithFaker, DatabaseMigrations;

    public function setUp(): void
    {
        parent::setUp();
        $this->seed();
    }


    public function test_admin_can_create_event_and_view_in_event_list()
    {
        //login as admin
        $admin = $this->signInAsAdmin();

        $attributes = [
            'event_name' => $this->faker->name,
            'event_description' => $this->faker->paragraph,
            'event_start_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'event_end_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'organisation_name' => $this->faker->company,
            'location' => $this->faker->address,
            'contact_name' => $this->faker->name,
            'contact_phone' => $this->faker->phoneNumber,
            'contact_email' => $this->faker->email,
            'contact_link' => $this->faker->url,
            'venue' => $this->faker->address,
            'event_categories' => [1,2],
            'event_topics' => [2,3]
        ];

        //create new event
        $this->post('/admin/events', $attributes);

        //retrieve event from database
        $event = Event::with('event_categories', 'event_topics')->find(1);

        //ensure the event data is in the database
        $this->assertDatabaseHas('events', ['event_name' => $attributes['event_name'], 'event_description' => $attributes['event_description']]);

        //ensure the data is in the pivot tables for categories
        foreach ($event->event_categories AS $event_category){
            $this->assertDatabaseHas('content_category_event', [
                'event_id' => $event_category->pivot->event_id,
                'content_category_id' => $event_category->pivot->content_category_id
            ]);
        }

        //ensure the data is in the pivot tables for tags
        foreach ($event->event_topics AS $event_topics){
            $this->assertDatabaseHas('content_tag_event', [
                'event_id' => $event_topics->pivot->event_id,
                'content_tag_id' => $event_topics->pivot->content_tag_id
            ]);
        }

        //make sure the title appears on the group list
        $this->get('/admin/events')->assertSee($attributes['event_name']);
    }

    public function test_admin_can_edit_event_and_view_in_event_list()
    {
        //login as admin
        $admin = $this->signInAsAdmin();

        $attributes = [
            'event_name' => $this->faker->name,
            'event_description' => $this->faker->paragraph,
            'event_start_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'event_end_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'organisation_name' => $this->faker->company,
            'location' => $this->faker->address,
            'contact_name' => $this->faker->name,
            'contact_phone' => $this->faker->phoneNumber,
            'contact_email' => $this->faker->email,
            'contact_link' => $this->faker->url,
            'venue' => $this->faker->address,
            'event_categories' => [1,2],
            'event_topics' => [2,3]
        ];

        //create new event
        $this->post('/admin/events', $attributes);

        //retrieve event from database
        $event = Event::with('event_categories', 'event_topics')->find(1);

        $attributes_edit = [
            'event_name' => $this->faker->name,
            'event_description' => $this->faker->paragraph,
            'event_start_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'event_end_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'organisation_name' => $this->faker->company,
            'location' => $this->faker->address,
            'contact_name' => $this->faker->name,
            'contact_phone' => $this->faker->phoneNumber,
            'contact_email' => $this->faker->email,
            'contact_link' => $this->faker->url,
            'venue' => $this->faker->address,
            'event_categories' => [3,2],
            'event_topics' => [2,1]
        ];

        //update event
        $this->put($event->path(), $attributes_edit);

        //retrieve event from database
        $event = Event::with('event_categories', 'event_topics')->find(1);

        //ensure the event data is in the database
        $this->assertDatabaseHas('events', [
            'event_name' => $attributes_edit['event_name'],
            'location' => $attributes_edit['location']
        ]);

        //ensure the data is in the pivot tables for categories
        foreach ($event->event_categories AS $event_category){
            $this->assertDatabaseHas('content_category_event', [
                'event_id' => $event_category->pivot->event_id,
                'content_category_id' => $event_category->pivot->content_category_id
            ]);
        }

        //ensure the data is in the pivot tables for tags
        foreach ($event->event_topics AS $event_topics){
            $this->assertDatabaseHas('content_tag_event', [
                'event_id' => $event_topics->pivot->event_id,
                'content_tag_id' => $event_topics->pivot->content_tag_id
            ]);
        }

        //make sure the title appears on the group list
        $this->get('/admin/events')->assertSee($attributes_edit['event_name']);
    }

    public function test_admin_can_soft_delete_event_and_does_not_appear_on_event_list()
    {
        //login as admin
        $admin = $this->signInAsAdmin();

        $attributes = [
            'event_name' => $this->faker->name,
            'event_description' => $this->faker->paragraph,
            'event_start_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'event_end_date_time' => $this->faker->date('Y-m-d H:i:s'),
            'organisation_name' => $this->faker->company,
            'location' => $this->faker->address,
            'contact_name' => $this->faker->name,
            'contact_phone' => $this->faker->phoneNumber,
            'contact_email' => $this->faker->email,
            'contact_link' => $this->faker->url,
            'venue' => $this->faker->address,
            'event_categories' => [1,2],
            'event_topics' => [2,3]
        ];

        //create new event
        $this->post('/admin/events', $attributes);
        $event = Event::with('event_categories', 'event_topics')->find(1);

        $this->delete($event->path());

        //check the record has been soft deleted
        $this->assertSoftDeleted('events', ['event_name' => $attributes['event_name']]);

        //make sure the event name does not appear in event list
        $this->get('/admin/users')->assertDontSee($attributes['event_name']);

    }

}

РЕДАКТИРОВАТЬ

Дальнейшее обновление выполняется dd ($ this-> post ('/ admin / events ', $ attribute)) Я получаю следующую ошибку:

exception: Illuminate\Session\TokenMismatchException^ {#3806
      #message: "CSRF token mismatch."
      #code: 0
      #file: "./vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php"
      #line: 83
      trace: {

Как можно передать токен во время теста?

Любая помощь будет принята с благодарностью

С уважением, Дэнни

1 Ответ

0 голосов
/ 05 февраля 2020

Я нашел решение этой проблемы из следующего поста

TokenMismatchException в Laravel форме авторизации

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