Я запускаю автоматические тесты в 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: {
Как можно передать токен во время теста?
Любая помощь будет принята с благодарностью
С уважением, Дэнни