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

教程中,形如

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

的语句可以重构为

$question = create(Question::class);

那么,

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

该如何重构呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
洛未必达
最佳答案

这个可以新建一个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年前

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