簡體   English   中英

批量更新和檢查屬性更改不起作用(Laravel)

[英]Mass Update and Examing Attribute Change are not working (Laravel)

我有這段代碼,我想在用戶表上執行批量更新和檢查屬性更改。 但是,當我運行 php artisan 測試時,測試文件中出現“此測試未執行任何斷言”的錯誤。 我檢查了用戶表,但沒有任何變化。 有人能幫我嗎? 謝謝

<?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');
}
}

用戶表的結構是 'id', 'name', 'email', 'email_verified_at', 'password', 'created_at'

好吧,你沒有做出任何斷言。 isDirty()/isClean()只返回布爾值。 都不是:

$post->isDirty();
$post->isDirty('title');

$user->isClean();
$user->isClean('name');

是斷言。 這是一個斷言。

// $this being the class that extends Tests\TestCase
$this->assertEquals($post->isDirty(), false);

在您的代碼中:

  • $post->isDirty(); 應該等於false因為$post的更改已經保存( $post->save();
  • $post->isDirty('title'); 與此相同。

批量更新不會更改並保存每個 model。 他們完全繞過了 eloquent 的事件。 考慮到這一點:

  • $user->isClean(); 應該等於true因為$user的更改已經保存( $user->save();
  • $user->isClean('name'); 與此相同。
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

使用簡單的assertEquals斷言

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM