php - ¿Cómo simular el encabezado Aceptar en una prueba dentro de un paquete Laravel 5?
testing laravel-5 (1)
Actualmente estoy creando un paquete Laravel que inyecta un nuevo método en Illuminate/Http/Request
través de Macros . El método que estoy inyectando se ha completado y se espera que funcione bien, pero también quiero probarlo antes de lanzarlo.
Mi prueba requiere que cambie el encabezado Accept
la solicitud, para que pueda ver si la prueba está pasando o no. Así que he hecho lo siguiente para simular la solicitud:
// 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'');
}
}
Luego, en mi prueba, uso el método que estoy inyectando en Request
con $this->request->wantsYaml()
y siempre devuelve falso ya que el encabezado Accept
no se configura en 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!
}
}
¿Cómo puedo seguir simulando los encabezados en una prueba en el desarrollo de paquetes Laravel?
EDITAR
Esta es mi clase YamlRequest
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);
}
}
Así que, literalmente, tengo que simular la wantsYaml
para ver si mi método wantsYaml
funciona como se esperaba.
Ok, para ser honesto, no sé cómo usas este YamlRequest
en tu código, pero creo que hay 2 problemas aquí:
1) En su prueba, crea el objeto Illuminate/Http/Request
y no el objeto YamlRequest
. ¿Es correcto? Para mí no lo parece pero tal vez debería ser así.
2) Lo segundo es el código del método. Al getAcceptableContentTypes()
implementación de su método, establece un encabezado no válido porque el método getAcceptableContentTypes()
obtiene el encabezado Accept
y no el tipo de Content-Type
Si cambio el código de prueba a algo como esto:
$request = new /App/Http/Requests/YamlRequest();
$request->headers->set(''Accept'', ''application/x-yaml'');
$this->assertTrue($request->wantsYaml());
pasó. Pero tuve que usar el encabezado Accept
y no el tipo de Content-Type
. Creo que ese es el error.