Reputation: 133
I have this piece of code which I want to perform Mass Update and Examing Attribute Change on the User table. However, when I ran the php artisan test, there is an error said that 'This test did not perform any assertions' in the test file. I checked the user table but nothing change. Can someone help me? Thank you
<?php
namespace Tests\Feature;
use App\Models\Post;
//use http\Client\Curl\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Tests\TestCase;
use App\Models\User;
class PostExampleTest extends TestCase
{
/**
* A basic feature test example.
*
* @return void
*/
public function test_example()
{
$post = Post::factory()->create();
//Create 20 more posts
$post1 = Post::factory()->count(20)->create();
$post->title = 'Post Test';
$post->save();
//Create 10 more users
$makeTenUsers = User::factory()->count(10)->create();
$user = User::find(1);
$user->name = 'Kaeith';
$user->save();
//Mass Updates
User::where('email_verified_at', '2021-02-28 23:50:21')
->update(['email'=>'kaeith']);
//Examining Attribute Changes
$post->isDirty();
$post->isDirty('title');
$user->isClean();
$user->isClean('name');
}
}
The structure of the user table is 'id', 'name', 'email', 'email_verified_at', 'password', 'created_at'
Upvotes: 0
Views: 267
Reputation: 15879
Well, You are not making any assertions. isDirty()/isClean()
just return booleans. None of these:
$post->isDirty();
$post->isDirty('title');
$user->isClean();
$user->isClean('name');
are assertions. This is an assertion.
// $this being the class that extends Tests\TestCase
$this->assertEquals($post->isDirty(), false);
In your code:
$post->isDirty();
should be equal to false
because the $post
's changes have already been saved ($post->save();
)$post->isDirty('title');
same with this.Mass updates don't change and save each model. They bypass eloquent's events entirely. With that in mind:
$user->isClean();
should be equal to true
because the $user
's changes have already been saved ($user->save();
)$user->isClean('name');
same with this.User::factory()->create();
$user = User::first();
$user->isClean(); // true
$user->isClean('name'); // true
$user->isClean('email'); // true
$user->isDirty(); // false
$user->isDirty'name'); // false
$user->isDirty('email'); // false
$user->name .= 'a';
$user->isClean(); // false
$user->isClean('name'); // false
$user->isClean('email'); // true
$user->isDirty(); // true
$user->isDirty'name'); // true
$user->isDirty('email'); // false
$user->save();
$user->isClean(); // true
$user->isClean('name'); // true
$user->isClean('email'); // true
$user->isDirty(); // false
$user->isDirty'name'); // false
$user->isDirty('email'); // false
With simple assertEquals
assertion
User::factory()->create();
$user = User::first();
$this->assertEquals($user->isClean(), true);
$this->assertEquals($user->isClean('name'), true);
$this->assertEquals($user->isClean('email'), true);
$this->assertEquals($user->isDirty(), false);
$this->assertEquals($user->isDirty'name'), false);
$this->assertEquals($user->isDirty('email'), false);
$user->name = 'a';
$this->assertEquals($user->isClean(), false);
$this->assertEquals($user->isClean('name'), false);
$this->assertEquals($user->isClean('email'), true);
$this->assertEquals($user->isDirty(), true);
$this->assertEquals($user->isDirty'name'), true);
$this->assertEquals($user->isDirty('email'), false);
$user->save();
$this->assertEquals($user->isClean(), true);
$this->assertEquals($user->isClean('name'), true);
$this->assertEquals($user->isClean('email'), true);
$this->assertEquals($user->isDirty(), false);
$this->assertEquals($user->isDirty'name'), false);
$this->assertEquals($user->isDirty('email'), false);
Upvotes: 0