Attualmente sto creando un pacchetto Laravel che inietta un nuovo metodo in Illuminate\Http\Request
tramite Macros. Il metodo che sto iniettando è stato completato e dovrebbe funzionare bene, ma voglio anche testarlo prima di rilasciarlo.Come simulare l'intestazione Accept in un test all'interno di un pacchetto Laravel 5?
Il mio test richiede di modificare l'intestazione della richiesta Accept
, in modo che possa vedere se il test sta passando o no. Così ho fatto quanto segue per simulare la richiesta:
// package/tests/TestCase.php
namespace Vendor\Package;
use Illuminate\Http\Request;
use Orchestra\Testbench\TestCase as Orchestra;
abstract class TestCase extends Orchestra
{
/**
* Holds the request
* @var Illuminate\Http\Request
*/
protected $request;
/**
* Setup the test
*/
public function setUp()
{
parent::setUp();
$this->request = Request::capture();
$this->request->headers->set('Accept', 'application/x-yaml');
}
}
Poi nel mio test Io uso il metodo che sto iniettando nel Request
con $this->request->wantsYaml()
ed è sempre il ritorno falsa in quanto l'intestazione Accept
non è sempre impostata su application/x-yaml
.
class RequestTest extends TestCase
{
/** @test */
public function it_should_return_a_bool_if_page_wants_yaml_or_not()
{
dump($this->request->wantsYaml()); // Return false
$this->assertTrue($this->request->wantsYaml()); // It fails!
}
}
Come posso continuare a simulare le intestazioni in un test nello sviluppo del pacchetto Laravel?
EDIT
Questo è il mio YamlRequest
classe
use Illuminate\Http\Request;
use Illuminate\Support\Str;
class YamlRequest extends Request
{
/**
* Acceptable content type for YAML.
* @var array
*/
protected $contentTypeData = ['/x-yaml', '+x-yaml'];
/**
* Determine if the current request is asking for YAML in return.
*
* @return bool
*/
public function wantsYaml()
{
$acceptable = $this->getAcceptableContentTypes();
// If I dd($acceptable), it comes out as empty during tests!
return isset($acceptable[0]) && Str::contains($acceptable[0], $this->contentTypeData);
}
}
Così ho letteralmente dovuto simulare l'accettare per vedere se il mio metodo wantsYaml
funziona come previsto.
Si prega di includere la classe o la parte della classe in cui si desidera eseguirla e come si passa/crea oggetto Richiesta in questa classe –
Aggiunta l'istruzione 'use'. – Aborted
@ MarcinNabiałek Quale classe intendi esattamente? Voglio solo simulare l'intestazione Content-Type per i miei test. Il mio codice funziona come dovrebbe (credo), ma ho bisogno di questa simulazione nei miei test per dimostrarlo. – Aborted