Использование 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]
Пользователисоздается и назначается роль одинаково в обоих методах.Я не понимаю, почему они ведут себя по-разному, когда вызывается второй метод.