I am not really sure if I set it up correctly or not as it is my first time working with PHPUnit tests.
I want to test one particular console command which sends emails to users.
Here's my unit test.
/**
* @test
*/
public function test_expiring_assessment_command_success()
{
$user = $this->getOrCreateTestUser();
$assessment = $this->getOrCreateTestOnlineVisit($user, 'cancelled');
Log::debug($assessment); //this log logs the factory created assessment
Log::debug(env('APP_ENV')); //testing
$this->artisan('process:send-visit-emails');
}
This is the code in my SendVistEmails.php
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$from = Carbon::now()->subDays(7)->startOfDay();
$to = $from->copy()->endOfDay();
$assessments = Assessment::query()
->whereIn('status', ['pending_pause', 'pending'])
->whereNotNull('response_required_from')
->whereBetween('response_required_from', [$from, $to])
->select('details', 'status')
->get();
foreach ($assessments as $a){
Log::debug($a); //this logs assessments present in DB instead of the one created in my test.
}
$assessments->each->expire();
}
Now, when I run phpunit tests it just interacts with code and sends emails to all the users present in DB.
I want to run command just for testing and in my SendVistEmails.php code, when I log $a, it should have only the assessment my unit test created and not the ones from DB.
I spent two days on this reading so much documentation but couldn't figure out What am I missing.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire