美文网首页
在运行Phpunit的过程中,遇到了ReflectionExce

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

作者: CodingLady | 来源:发表于2018-10-29 18:17 被阅读61次

    这几天想用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

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

    相关文章

      网友评论

          本文标题:在运行Phpunit的过程中,遇到了ReflectionExce

          本文链接:https://www.haomeiwen.com/subject/kxcitqtx.html