首页 > 解决方案 > 如何在 Lumen 7.x 中设置多种工厂类型

问题描述

我想为我的用户模型(例如管理员)设置多个工厂。我按照文档并使用“defineAs”进行了尝试:https ://lumen.laravel.com/docs/7.x/testing 。但似乎这种方式不再可用:https ://github.com/illuminate/database/commit/f07d290e75983ccbc51379b88181b7df9cb70ca0 。有没有替代方法?!

标签: lumenfactories

解决方案


如果你只需要使用defineAs,你实际上只需要重新排列define函数,比如

$factory->define('App/User', function (Faker $faker) use ($factory) {
    $user = $factory->raw('App/User');

    return array_merge($user, ['admin' => true]);
}, 'admin');

编辑:当我需要调用所述工厂以在 phpunit 上将其与actingAs一起使用时,看起来我也遇到了一些问题,所以我做了一些解决方法

在工厂我做类似的东西

$factory->define('App/User', function (Faker $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
    ];
});

在测试中我称之为

$admin = factory('App/User')->create([
    'admin' => true
]);

$this->actingAs($admin)->post('/login', ['username' => 'admin', 'password' => 'admin'])

不过,如果有人能举例说明拥有多个工厂会更好


推荐阅读