在Laravel中使用MySQL数据库连接运行多个单元测试时出错

时间:2014-11-06 12:13:41

标签: unit-testing laravel phpunit

我已为几款Laravel型号制作了一些单元测试。这些是需要按特定顺序存储的项目的Eloquent模型,因此,有一些方法可以在项目被删除时向上,向下移动项目并对碎片进行碎片整理。为此,我需要连接到测试数据库(我通过app / testing / database.php完成)并添加一些虚拟数据,然后才能测试方法。

这是我的 TestCase.php

<?php

class TestCase extends Illuminate\Foundation\Testing\TestCase {

    /**
     * Creates the application.
     *
     * @return \Symfony\Component\HttpKernel\HttpKernelInterface
     */
    public function createApplication()
    {
        $unitTesting = true;

        $testEnvironment = 'testing';

        return require __DIR__.'/../../bootstrap/start.php';
    }

    public function prepareDatabaseForTests()
    {
            Artisan::call('migrate');
            Artisan::call('migrate:refresh');
            Artisan::call('db:seed');

            Mail::pretend(true);
    }
}

然后,运行我的第一个单元测试正常( SectionTest.php ):

<?php

class SectionTest extends TestCase {

  public function setUp()
  {
    $this->prepareDatabaseForTests();
  }



  //Tests adding a new section
  public function testAddSection()
  {
    $this->assertTrue(true);
  }

}

一旦我添加第二组测试,我就会收到错误

  

致命错误:未找到“Artisan”类   第26行/home/vagrant/Sites/mysite/app/tests/TestCase.php

以下是我的第二个测试文件( CourseTest.php )的示例:

<?php

class CourseTest extends TestCase {

    public function setUp()
    {
        $this->prepareDatabaseForTests();

    }


  //Tests adding a new course
  public function testAddCourse()
  {
    $this->assertTrue(true);
  }
}

当我删除第二个测试文件( CourseTest.php )时,phpunit测试正常。我已经尝试运行composer update以确保刷新自动加载但仍然没有运气。任何人都可以建议为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

您的迁移和重置订单无效。试试这个。

public function setUp()
{
    Artisan::call('migrate');
    Artisan::call('db:seed');
}

public function teardown()
{
    Artisan::call('migrate:reset');
}

检查this示例。

注意:在进行单元测试时触摸数据库不是一个好习惯。我建议你在单元测试中使用模拟。