【问题标题】:How to define a Laravel factory without a model?如何在没有模型的情况下定义 Laravel 工厂?
【发布时间】:2017-08-21 23:42:38
【问题描述】:

我是一名控制器测试人员,本质上想定义一个factory 来表示来自互联网的帖子。

这篇文章在控制器中被分成几个模型。

我正在对整个控制器进行功能测试,那么如何在没有模型的情况下创建 factory 来表示前端帖子?

看来factory 是这样制作的:

$factory->define(App\Models\User::class, function (Faker\Generator $faker) {

static $password;

return [
    'name' => $faker->name,
    'email' => $faker->unique()->safeEmail,
    'password' => $password ?: $password = bcrypt('secret'),
    'remember_token' => str_random(10),
    ];
});

App\Models\User::class 让我感到震惊。我想要一个与User 模型或任何模型无关的通用模型。

【问题讨论】:

  • 所以就像在那个函数的上下文中一样,我可以简单地编造任何东西来替换 App\Models\User::class?我就是这样称呼那个工厂的?
  • 工厂可能依赖于模型,现在我考虑到它,因为 make 和 create 命令。然而,模型工厂并不是生成假数据的唯一方法。编写自己的函数,使用 faker 生成对象..
  • 尝试$modelMock = Mockery::mock('App\Model'); 并在您的模型工厂调用该类。

标签: laravel testing


【解决方案1】:

你可以使用 laravel 自带的 Faker

use Faker\Factory;

$faker = Factory::create();

然后在 laravel 中使用模型的工厂中使用 faker

我是在播种机课上这样做的

here what i did

【讨论】:

    【解决方案2】:

    您必须在播种机中生成创建查询生成器实例。因此,例如,您需要气球表中的示例数据:

    DB::table('table_name')->insert(
      [
       'name' => $faker->name, 
       'email' => $faker->unique()->safeEmail, 
       'password' => $password ?: $password = bcrypt('secret'),
       'remember_token' => str_random(10)
     ]
    );
    

    而且您必须对要插入给定表的每一行都执行此操作。 由于没有模型,因此您不必担心模型工厂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-02
      • 2021-11-26
      • 1970-01-01
      • 2021-03-11
      • 2014-10-15
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多