使用Laravel 5.4和spatie/laravel-permission
Auth :: id()由多个测试方法调用时返回null。如果单独调用,则会定义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]的查询结果
两种方法中都以相同的方式创建用户并为其分配角色。我不明白为什么在调用第二种方法时它们的行为有所不同。