Laravel 7 模型工厂正在为 faker 抛出 "InvalidArgumentException: Unknown formatter" 异常
Laravel 7 model factory is throwing "InvalidArgumentException: Unknown formatter" exception for faker
我开始使用 Laravel 8 构建 Web 应用程序。我注意到 Laravel 8 中发生了一些变化,包括模型工厂。现在,我正在使用模型工厂编写单元测试。但是当我使用 faker 伪造字段时它会抛出错误。
这是我的测试方法。
public function testHasRoleReturnsTrue()
{
$user = User::factory()->create();
}
如您所见,我现在要做的就是尝试使用工厂创建用户。这是我的工厂 class 用户模型。
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => 'yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
}
如你所见,我正在使用 faker 伪造值。当我 运行 测试时,我得到以下错误。
InvalidArgumentException: Unknown formatter "name"
/var/www/vendor/fzaninotto/faker/src/Faker/Generator.php:248
/var/www/vendor/fzaninotto/faker/src/Faker/Generator.php:228
/var/www/vendor/fzaninotto/faker/src/Faker/Generator.php:274
/var/www/database/factories/UserFactory.php:28
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:366
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:345
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:329
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php:157
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:334
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:302
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:228
我假设错误是因为我使用了faker。但我无法在代码中发现任何问题。我的代码有什么问题,我该如何解决?
这是因为您在单元测试中使用了它。它正在扩展 PhpUnit 的 TestCase。
当您扩展 Laravel 的 TestCase 时它应该可以工作。
我开始使用 Laravel 8 构建 Web 应用程序。我注意到 Laravel 8 中发生了一些变化,包括模型工厂。现在,我正在使用模型工厂编写单元测试。但是当我使用 faker 伪造字段时它会抛出错误。
这是我的测试方法。
public function testHasRoleReturnsTrue()
{
$user = User::factory()->create();
}
如您所见,我现在要做的就是尝试使用工厂创建用户。这是我的工厂 class 用户模型。
<?php
namespace Database\Factories;
use App\Models\User;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Str;
class UserFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = User::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
'name' => $this->faker->name,
'email' => $this->faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => 'yIXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
}
如你所见,我正在使用 faker 伪造值。当我 运行 测试时,我得到以下错误。
InvalidArgumentException: Unknown formatter "name"
/var/www/vendor/fzaninotto/faker/src/Faker/Generator.php:248
/var/www/vendor/fzaninotto/faker/src/Faker/Generator.php:228
/var/www/vendor/fzaninotto/faker/src/Faker/Generator.php:274
/var/www/database/factories/UserFactory.php:28
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:366
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:345
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:329
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Concerns/GuardsAttributes.php:157
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:334
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:302
/var/www/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php:228
我假设错误是因为我使用了faker。但我无法在代码中发现任何问题。我的代码有什么问题,我该如何解决?
这是因为您在单元测试中使用了它。它正在扩展 PhpUnit 的 TestCase。
当您扩展 Laravel 的 TestCase 时它应该可以工作。