Auth :: id () является нулевым в контроллере, когда вызывается более чем одним тестовым методом в одном и том же тестовом классе - PullRequest
0 голосов
/ 23 мая 2019

Использование Laravel 5.4 и spatie / laravel-Разрешение

Auth :: id () возвращается ноль, когда вызывается более чем одним методом тестирования.Если вызывается независимо, Auth :: id () определяется и тесты выполняются, как и ожидалось.

Вот весь класс:

namespace Tests\Feature;

use App\PartNumber;
use App\SeriesNumber;
use App\Sort;
use App\User;
use App\WorkOrder;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Spatie\Permission\Models\Role;
use Tests\TestCase;

class SeriesNumberTest extends TestCase
{
    use DatabaseMigrations;

    public function setUp()
    {
        parent::setUp();
        $this->app->make(\Spatie\Permission\PermissionRegistrar::class)->registerPermissions();
    }

    /** @test */
    public function user_without_access_to_work_order_should_not_delete_series_number()
    {
        // create user
        $user = factory(User::class)->create();
        $role = Role::create(['name' => 'shift_supervisor']);
        $user->assignRole($role);

        // create work order, part_number, series number
        $work_order = factory(WorkOrder::class)->create([
            'client_id' => 1,
        ]);

        $part_number = factory(PartNumber::class)->make();
        $work_order->part_numbers()->save($part_number);
        $series_number = factory(SeriesNumber::class)->make([
            'number' => 'sample text'
        ]);

        $part_number->series_numbers()->save($series_number);

        // assign user to work_order
        $user->work_orders()->save($work_order);

        // test
        $this->actingAs($user)->get('/series-numbers/destroy/'.$series_number->id);

        $this->assertDatabaseMissing('series_numbers', [
            'number' => 'sample text'
        ]);
    }

    /** @test */
    public function user_without_access_to_work_order_cant_create()
    {
        $user = factory(User::class)->create();
        $role = Role::create(['name' => 's
        hift_supervisor']);
        $user->assignRole($role);
        $work_order = factory(WorkOrder::class)->create([
            'client_id' => 1,
        ]);

        $user->work_orders()->save($work_order);
        $part_number = factory(PartNumber::class)->create([
            'work_order_id' => $work_order->id
        ]);

        $sort = factory(Sort::class)->create([
            'work_order_id' => $work_order->id,
            'site_id' => 1,
            'measuring_unit_id' => 1,
        ]);

        $series_number = factory(SeriesNumber::class)->raw([
            'number' => 'sample text',
            'part_number_id' => $part_number->id,
            'sort_id' => $sort->id,
            'mfg_date' => '2019-05-28 00:00:00.0'
            // ? need to override factory because phpunit complains about array to string conv
        ]);

        $response = $this->actingAs($user)
            ->json('POST', '/series-numbers/create', $series_number);

        $this->assertDatabaseHas('series_numbers', [
            'number' => 'sample text'
        ]);
    }
}

У меня есть 2 метода тестирования:

user_without_access_to_work_order_cant_create()

и:

user_without_access_to_work_order_should_not_delete_series_number()

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

1) Tests\Feature\SeriesNumberTest::user_without_access_to_work_order_should_not_delete_series_number

Illuminate \ Database \ Eloquent \ ModelNotFoundException: нет результатов запроса для модели [App \ User]

Пользователисоздается и назначается роль одинаково в обоих методах.Я не понимаю, почему они ведут себя по-разному, когда вызывается второй метод.

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