Laravel TDD 教程 6.3. 辅助函数,数据工厂的 state 方法该如何重构

教程中,形如

$question = factory(Question::class)->create();

的语句可以重构为

$question = create(Question::class);

那么,

$question = factory(Question::class)->state('published')->create();

该如何重构呢?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
洛未必达
最佳答案

这个可以新建一个PublishedQuestionFactory来实现。具体步骤如下:

1.添加PublishedQuestionFactory

database/helpers/PublishedQuestionFactory.php

<?php

namespace Helpers;

use App\Models\Question;

class PublishedQuestionFactory
{
    public static function createPublished($overrides = [])
    {
        $question = factory(Question::class)->create($overrides);
        $question->publish();

        return $question;
    }

    public static function createUnpublished($overrides = [])
    {
        $question = factory(Question::class)->state('unpublished')->create($overrides);

        return $question;
    }
}

2.修改composer.json文件:

composer.json

.
.
.
"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories",
            "database/helpers"  <-- 此处
        ],
.
.
.

3.加载helpers目录下的文件:

$ composer dump-autoload

4.替换形如:

$question = factory(Question::class)->state('published')->create();

的代码为:

$question = PublishedQuestionFactory::createPublished();
3年前 评论
ZouZhipeng (楼主) 3年前
讨论数量: 1
洛未必达

这个可以新建一个PublishedQuestionFactory来实现。具体步骤如下:

1.添加PublishedQuestionFactory

database/helpers/PublishedQuestionFactory.php

<?php

namespace Helpers;

use App\Models\Question;

class PublishedQuestionFactory
{
    public static function createPublished($overrides = [])
    {
        $question = factory(Question::class)->create($overrides);
        $question->publish();

        return $question;
    }

    public static function createUnpublished($overrides = [])
    {
        $question = factory(Question::class)->state('unpublished')->create($overrides);

        return $question;
    }
}

2.修改composer.json文件:

composer.json

.
.
.
"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories",
            "database/helpers"  <-- 此处
        ],
.
.
.

3.加载helpers目录下的文件:

$ composer dump-autoload

4.替换形如:

$question = factory(Question::class)->state('published')->create();

的代码为:

$question = PublishedQuestionFactory::createPublished();
3年前 评论
ZouZhipeng (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!