Bonjour,
Voila je rencontre un petit problème avec mon code.
Je suis entraine de faire un teste unitaire pour tester la collecte d'informations sur un utilisateurs. Dans ce test je teste si il y a un attribute "ip_md5" et email_md5 dans l'objet App/User
public function testMd5Informations()
{
$user = factory(User::class)->create();
$response = $this->call('GET','/profil/',['name' => $user->name])
$this->assertObjectHasAttribute('email_md5', $user);
$this->assertObjectHasAttribute('ip_md5', $user);
}
Le leste passse au succès. J'ai ajouter ceci dans ma classe App/User
protected $appends = ['email_md5', 'ip_md5'];
// Getters
public function getEmailMd5Attribute(){
return md5($this->attributes['email']);
}
public function getIpMd5Attribute(){
return md5($this->attributes['ip']);
}
Le teste à échoué même avec les attributes email_md5 et ip_md5
1) Tests\Feature\UsersTest::testMd5Informations
Failed asserting that object of class "App\User" has attribute "email_md5".
C'est vraiment étrange
J'ai trouvé la solution la variable $appends n'est disponible que sur des tableau ou des json. Je doir mondifier mon teste. Merci Kndeye de ton aide,
Salut, essai de faire un dd($user) avant la vérification sur le test et regarde si le user a vraiment les attributs que tu attends
Salut
J'ai fait un dd($user)
ça me donne ça :
App\User {#971
#fillable: array:4 [
0 => "name"
1 => "email"
2 => "password"
3 => "confirmation_token"
]
#hidden: array:4 [
0 => "password"
1 => "remember_token"
2 => "email"
3 => "ip"
]
#appends: array:2 [
0 => "email_md5"
1 => "ip_md5"
]
#connection: null
#table: null
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#perPage: 15
+exists: true
+wasRecentlyCreated: true
#attributes: array:9 [
"name" => "D'angelo McLaughlin I"
"email" => "fschaefer@example.com"
"password" => "$2y$10$dUiovOZ84GaCOUS5cyVC8uP.ZB2g5SATeaVcNFCoIA2lX2IMrDwma"
"remember_token" => "9w0IGk6zSu"
"role" => "user"
"ip" => "97.147.67.175"
"updated_at" => "2017-02-13 18:44:53"
"created_at" => "2017-02-13 18:44:53"
"id" => 1
]
#original: array:9 [
"name" => "D'angelo McLaughlin I"
"email" => "fschaefer@example.com"
"password" => "$2y$10$dUiovOZ84GaCOUS5cyVC8uP.ZB2g5SATeaVcNFCoIA2lX2IMrDwma"
"remember_token" => "9w0IGk6zSu"
"role" => "user"
"ip" => "97.147.67.175"
"updated_at" => "2017-02-13 18:44:53"
"created_at" => "2017-02-13 18:44:53"
"id" => 1
]
#casts: []
#dates: []
#dateFormat: null
#events: []
#observables: []
#relations: []
#touches: []
+timestamps: true
#visible: []
#guarded: array:1 [
0 => "*"
]
#rememberTokenName: "remember_token"
Étrangement je vois bien les attributes email_md5 et ip_md5, mais le teste ne les détecte pas et il continue à achoué alors que normalement il doit réussir car j'ai créer des getters dans mon model User
Désolé de te dire que tes attributs email_md5 et ip_md5 ne sont pas ajoutés aux attributs accessibles, essais de les ajouter sur le tableau des fillable dans ton model
$fillable = ['email_md5', 'ip_md5', .....]
Bonjour,
les champs email_md5 et ip_md5 sond des champs virtuelles. Il n'existe pas dans ma basse de donnée. Cest attributs sont dans le tableau appends de mon objet. Est-ce que ce peut le tableau $appends n'est disponible que losrque je fait un requête en format json pour une api Rest? J'ai bien ajouté au champs $fillable et le test échoué toujours.