Laravel测试 - 我应该在每个测试中创建依赖资源吗?

时间:2018-03-13 09:16:46

标签: laravel unit-testing tdd

从使用Laravel Spark 6(Laravel 5.6)的新版本开始,并决定尝试使用TDD。

首次测试很可爱,我创建了一个单元测试,以确保用户可以创建一个团队。

(伪代码):

class AddNewTeamTest extends TestCase
{
    /** @test */
    public function admin_can_create_new_team()
    {
        // Create a user account

        $data = [
            // Information for tea,
        ];

        $response = $this->withHeaders([
                'X-Requested-With' => 'XMLHttpRequest',
            ])
            ->actingAs($user)
            ->json('POST', '/api/teams', $data);

        $response
            ->assertStatus(201);
    }

}

在TDD风格中使用它是一个很好的过程,但现在我希望能够编写一个测试来为该团队添加成员。

似乎倒退了,在这个新测试中,我会在第一次测试中运行所有代码。有没有办法解决?对于新测试,我需要一个用户和团队已经创建,然后才能测试将用户添加到该团队..

欢迎任何链接或建议!

1 个答案:

答案 0 :(得分:1)

您可以使用函数setUp()并在其中构建您的环境。 所以你的课应该是这样的:

class AddNewTeamTest extends TestCase
    {

    protected  function setUp()
    {

        // Create a user account
        // Create your enviroment, etc.

        $this->actingAs($user)
    }


    /** @test */
    public function admin_can_create_new_team()
    {

        $data = [
            // Information for tea,
        ];

        $response = $this->withHeaders([
                'X-Requested-With' => 'XMLHttpRequest',
            ])
            ->json('POST', '/api/teams', $data);

        $response
            ->assertStatus(201);
    }

    public function testAnother()
    {
        \\your next test
    }
}

如果您在接下来的几个案例中需要一个团队,那么应该在setUp()中添加。

此外,你可以让你的下一个测试需要ypur上一个。在这种情况下,您可以在admin_can_create_new_team()中返回一些内容,并将其作为testAnother()

中的参数

更多信息: https://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.test-dependencies