在运行Phpunit的过程中,遇到了ReflectionExce

2018-10-29  本文已影响61人  CodingLady

这几天想用laravel上的phpunit测一个接口,结果运行的时候,出现了

ReflectionException: Class config does not exist

网上搜了下解决方案,说是.env配置项的值中有空格,比如APP_NAME=test 123,改为APP_NAME="test 123"就好了。然而我检查了半天也没发现.env里面哪项的值是带空格的。

怎么办呢?

首先,看了下出问题的上下文,

//某Model,和数据库中某表关联
class SomeModel extends Model
{
        public static function getRecordByID($id)
        {
                $record=SomeModel::where('id',$id)->first();
                return $record;
        }
}

//测试辅助类
class TestUtil
{
    public static function prepareEnvironment()
    {
          SomeModel::getRecordByID('123');
    }
}

//测试用例类:ATest.php,里面有个ACase,代表某具体用例
class ATest extends TestCase
{
    protected function setUp()
    {
        TestUtil::prepareEnvironment();
    }
    public function testACase()
    {
    }
}

出问题的行在getRecordByID里面,我就猜想是不是数据库访问有问题呢?

于是把访问数据库的代码,直接放在了testACase里,ATest改成了这样

//测试用例类:ATest.php,里面有个ACase,代表某具体用例
class ATest extends TestCase
{
    public function testACase()
    {
         SomeModel::getRecordByID('123');
    }
}

发现错误变成了

Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Operation timed out

那看来是配置项的问题
就按下面的步骤确认了一下环境问题:
1.phpunit.xml中的APP_ENV配置是否正确,phpunit默认的是testing。如果没有testing的env的话,可以改成自己想要的env,也可以建一个。
2.在testACase中打印一下APP_ENV,DB_CONNECTION,DB_HOST的信息,查看是否正确。如果不正确的话,要查一下是原因,常见的原因有
(1)之前配置缓存没清空,运行php artisan config:clear,清空一下配置项再运行
(2)加载.env加载错了
(3).env配置项的值写错了。

最后确认了1和2都没问题了,错误就变成了

SQLSTATE[HY000] [2002] No such file or directory

这个时候再次上网搜了一下,说DB_HOST不能是localhost,得改成127.0.0.1

这次成功运行了,大功告成!

上一篇下一篇

猜你喜欢

热点阅读