!!!!转载请注明作者和本文链接!!!!
这几天想用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
这次成功运行了,大功告成!
!!!!转载请注明作者和本文链接!!!!