Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

519
Visualizações
Laravel: las fábricas creadas con valores booleanos en la columna no pasan el caso de prueba con assertDatabaseHas en la base de datos mysql

La pregunta

Tengo mi muestra de tabla con columnas has_value y has_condition que son de tipo booleano creadas por laravel en MySQL. En Factory of the sample table he configurado el valor faker para que sea booleano. En el caso de prueba, he pasado el valor del falsificador tal como está. Laravel almacena el valor correctamente, pero el caso de prueba con assertDatabaseHas falla ya que MySQL almacena los valores en valores numéricos, pero el falsificador proporciona el valor booleano.

La puesta en marcha

Migración

 Schema::create('sample', function (Blueprint $table) { $table->unsignedBigInteger(); $table->boolean('has_value')->default(false); $table->boolean('has_condition')->default(false); });

Modelo

 class Sample extends Model { /** * The attributes that aren't mass assignable. * * @var array */ protected $guarded = ['id', 'created_at', 'updated_at']; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'has_condition' => 'boolean', 'has_value' => 'boolean', ]; }

La fábrica

 $factory->define(Sample::class, function (Faker $faker) { return [ 'has_condition' => $faker->boolean, 'has_value' => $faker->boolean ]; });

el caso de prueba

 use DatabaseMigrations; public function test_is_being_stored() { $data = factory(Sample::class)->make()->toArray(); $user = factory(User::class)->create() $this->actingAs($user)->post(route('some.route.store'), $data) ->assertSessionHasNoErrors() ->assertStatus(200); $this->assertDatabaseHas('sample', $data) }

El resultado es el siguiente

 Failed asserting that a row in the table [campaign_tax_years] matches the attributes { "has_condition": true, "has_value": true }. Found: [ { "id": 27, "created_at": "2020-07-01 07:36:52", "updated_at": "2020-07-01 07:36:52", "has_condition": 1, "has_value": 1 } ]

Los cheques de valor en la base de datos no son cheques encasillados. Pero el valor que se almacena es correcto. No puedo entender por qué Laravel no emite los valores y luego verifica los tipos de columna.

Varias versiones de artículos

Laravel: 6.8.x Mysql: 5.7.29 Phpunit: ^8.0

over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda