編碼
我有一個資料庫,其中有一個用于團隊和講師的表格,如下所示:
| id | team_id | instructor_id | ... |
每 24 小時運行一次批處理,更新該團隊的講師。
我需要創建一個簡單的測驗來檢查批處理是否正常運行,以及更換講師。
問題
該批次隨機更新講師,這意味著同一位講師可能會被選中兩次,從而在運行測驗時拋出錯誤。我嘗試檢查updated_at列是否更改,但似乎將相同的值傳遞給update()Laravel 時不會更改所述列。
問題
我應該如何檢查導師是否改變?
我只被分配進行測驗,所以我不應該改變批處理的操作方式(比如強制它updated_at改變)
但是在改變教練之前制作一個 for 回圈看起來非常難看。
而且由于導師只有3到5個,所以同一導師連續被選上幾次的幾率并不低。
更新
這是所要求的代碼。
測驗檔案:
class InstructorSelectionOrderTest extends TestCase
{
use RefreshDatabase;
...
/**
* @test
* @group instructorSelection
*
* @return void
*/
public function test_old_team_instructor_random()
{
$team = factory(RoutineTeam::class)->create(['instructor_id' => 4, 'updated_at' => Carbon::now()->subDays(1)]);
$room = factory(Room::class)->create(['team_id' => $team->id]);
$this->createNewUser($team->id, $room->id);
$this->artisan('project:reassign_instructors')->assertExitCode(0);
$result = RoutineTeam::where('id', $team->id)->get();
$this->assertFalse($result[0]->updated_at == $team->updated_at);
}
批次:
class ReassignInstructors extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'project:reassign_instructors';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//list of rooms that needs to be updated
$routineTeams = RoutineTeam::openedRoomTeams();
...
foreach ($routineTeams as $routineTeam) {
//Instructor::getRandomInstructor()->id = random number from 1 to 4
$routineTeam->instructor_id = Instructor::getRandomInstructor()->id;
$routineTeam->save();
}
return 0;
}
}
RoutineTeam 表:
| id | team_id | instructor_id | ... | updated_at
該測驗目前有 25% 的失敗幾率。我只能編輯測驗檔案。有沒有辦法僅通過更改測驗檔案使其失敗的可能性為 0%?
uj5u.com熱心網友回復:
由于講師 ID 在您的測驗中是靜態的,我猜它沒有外鍵約束。
那么,為什么不將instructor_id 設定為0,然后運行作業(或任何不存在的id)。
/**
* @test
* @group instructorSelection
*
* @return void
*/
public function test_old_team_instructor_random()
{
//setting the id to 0 so it is forced to change on 'project:reassign_instructors' command
$team = factory(RoutineTeam::class)->create(['instructor_id' => 0, 'updated_at' => Carbon::now()->subDays(1)]);
$room = factory(Room::class)->create(['team_id' => $team->id]);
$this->createNewUser($team->id, $room->id);
$this->artisan('project:reassign_instructors')->assertExitCode(0);
$result = RoutineTeam::where('id', $team->id)->get();
$this->assertFalse($result[0]->updated_at == $team->updated_at);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/461181.html
