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 quefalse
estrue
.
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 № 1Puede 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