【问题标题】:How to reuse phpunit test method in Laravel如何在 Laravel 中重用 phpunit 测试方法
【发布时间】:2017-03-05 17:15:18
【问题描述】:

我有 2 个测试类,所有测试运行良好。但问题是我不知道如何重用其他测试类方法。很抱歉,我是 Phpunit 的新手,我已经在搜索,但找不到解决方案。

class A_Test {

    public function create_something_1()
    {
        $this->visit('/a/create')
             ->type('Name','name')
             ->press('Submit')
             ->seeInDatabase('something_1', ['name' => 'Name']);
        $data = \App\Models\Something1::first();

        return $data;
    }

}


class B_Test {

    public function create_something_2()
    {

        // The problem is here, I result of new A_Test always null
        $a = (new A_Test)->create_something_1();

        $this->visit('/b/create')
             ->select($a->id, 'something_1')
             ->type('New Name','name')
             ->press('Submit')
             ->seeInDatabase('something_2', ['name' => 'New Name']);

    }

}

所以为了让 B_Test 工作,我总是像这样复制 A_Test 类中的方法

class B_Test {

    public function create_something_1()
    {
        $this->visit('/a/create')
             ->type('Name','name')
             ->press('Submit')
             ->seeInDatabase('something_1', ['name' => 'Name']);
        $data = \App\Models\Something1::first();

        return $data;
    }

    public function create_something_2()
    {
        // This is work
        $a = $this->create_something_1();

        $this->visit('/b/create')
             ->select($a->id, 'something_1')
             ->type('New Name','name')
             ->press('Submit')
             ->seeInDatabase('something_2', ['name' => 'New Name']);

    }

}

【问题讨论】:

  • 你没有扩展TestCase类?那里有一个TestCase 类,您可以在TestCase.php 文件中添加可重用的方法
  • 我已经扩展了TestCase,所有的测试工作,只是需要一种方法来重用重复的代码。

标签: laravel phpunit


【解决方案1】:

在您的 tests/TestCase.php 文件中,您可以这样做:

class TestCase extends Illuminate\Foundation\Testing\TestCase
{
    ....
    protected function create_something_resusable()
    {
        $this->visit('/a/create')
             ->type('Name','name')
             ->press('Submit')
             ->seeInDatabase('something_1', ['name' => 'Name']);
        $data = \App\Models\Something1::first();

        return $data;
    }
    ....
}

那么你们所有的测试都可以调用$this->create_something_resusable(),但是记得在所有的测试中扩展TestCase类。

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 2014-09-05
    相关资源
    最近更新 更多