/ / LARAVEL 5.0 + prueba de unidad - assertSessionHasErrors con diferentes bolsas - php, unit-testing, laravel-5, validación de laravel, solicitud de laravel

LARAVEL 5.0 + Unit Test - assertSessionHasErrors con diferentes bolsas - php, unit-testing, laravel-5, laravel-validation, laravel-request

Estoy escribiendo una prueba de unidad en Laravel 5.0 y en mi clase de solicitud estoy usando una bolsa diferente para mostrar los mensajes de error de validación.

Estoy usando esto en mi archivo:

/* ExampleRequest.php */
namespace AppHttpRequests;

use AppHttpRequestsRequest;
use IlluminateSupportFacadesAuth;

class ExampleRequest extends Request {

protected $errorBag = "otherbag";

public function rules(){
return [
"my_field" => "required"
];
}
}

En mi archivo de prueba, estoy probando usando esto:

/* ExampleTest.php */
class ExampleTest extends TestCase {
public function testPostWithoutData(){
$response = $this->call("POST", "url/to/post",[
"my_field" => ""
]);
$this->assertSessionHasErrors("my_field");
}
}

Si ejecuto las pruebas, no puedo obtener la afirmación correcta y devolver este problema:

Error de sesión perdida: my_field Falló en afirmar que false es true.

Si saco el $errorBag atributo del archivo de solicitud, no tengo problemas.

Puedo dar más detalles según sea necesario.

Respuestas

2 para la respuesta № 1

Puede obtener una bolsa alternativa de la tienda de sesión de esta manera:

$myBag = $this->app("session_store")->getBag("otherBag");
$this->assertTrue($myBag->any());

Sin embargo, Laravel no usa una bolsa alternativa por defecto, así que supongo que usted está haciendo algo en su código para registrar su AppRequest::$errorBag con el manejador de sesión.


0 para la respuesta № 2

No sé si está configurando su sesión en otro lugar, pero creo que puede hacer algo como:

$this->session(["foo" => "bar"]);

Antes de que puedas afirmar algo en sesión. Ver la sección de ayudantes de pruebas para Laravel 5.0