Estou tentando adicionar um novo comando a um conjunto de comandos existentes em torno de um modelo existente.
Os outros testes para os outros comandos ao redor disso funcionam perfeitamente, como esperado.
No entanto, esse novo teste + Comando para de escrever Artisan::output()
assim que adiciono qualquer chamada de método no Webhook
modelo. count()
, first()
, all()
. Não importa, e também não importa se eu o atribuo a uma variável ou o uso no mínimo. Não há exceção, não há erro de log do PHP/Laravel. O mesmo comando exato funciona perfeitamente quando chamado diretamente do bash artisan. É a coisa mais estranha que já vi.
Teste:
<?php
namespace Tests\Unit\Console\Commands\Webhook\Customer;
use App\Models\Shopify\Webhook;
use Illuminate\Support\Facades\Artisan;
use Tests\TestCase;
class ProcessUpdateWebhooksTest extends TestCase
{
/** @test */
public function thisWorksRightHere()
{
Artisan::call('boxer:process-customer-update-webhooks');
$this->assertStringContainsString(
'Hey',
Artisan::output()
);
}
}
Comando (comentar Webhook::count()
faz com que ele passe, caso contrário a saída do comando é ''
' e ele falha.
<?php
namespace App\Console\Commands\Webhook\Customer;
use App\Models\Shopify\Webhook;
use Illuminate\Console\Command;
class ProcessUpdateWebhooks extends Command
{
protected $signature = 'boxer:process-customer-update-webhooks
{--w|webhooks=25 : The maximum number of webhooks to process}';
protected $description = 'Process orders/create webhooks from Shopify (default 25)';
public function handle()
{
Webhook::count();
$this->info('Hey');
}
}
Seção phpunit.xml:
<php>
<env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/>
<!-- <env name="DB_DATABASE" value="testing"/> -->
<env name="MAIL_MAILER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="TELESCOPE_ENABLED" value="false"/>
</php>
Saída de teste:
PHPUnit 9.6.19 by Sebastian Bergmann and contributors.
F 1 / 1 (100%)
Time: 00:02.211, Memory: 48.50 MB
There was 1 failure:
1) Tests\Unit\Console\Commands\Webhook\Customer\ProcessUpdateWebhooksTest::thisWorksRightHere
Failed asserting that '' contains "Hey".
/Users/peterdemarco/code/projects/boxer/tests/Unit/Console/Commands/Webhook/Customer/ProcessUpdateWebhooksTest.php:16
/Users/peterdemarco/code/projects/boxer/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestCase.php:61
Todos os outros testes (novamente, incluindo todos os outros testes para este Modelo e Comandos que usam este Modelo) funcionam perfeitamente bem.
O que estou perdendo??
Isso pode acontecer porque você não está usando
$this->artisan
para testar um comando. Então outras coisas podem não estar definidas, pois ele está sendo executado em modo de teste.Mude seu teste para o caminho certo:
É super importante que você encadeie qualquer asserção à
artisan()
chamada. Se você não fizer isso, o comando será executado antes do esperado, por favor encadeie suas asserções falando estritamente sobre o comando.