!4继邸K恫ⅰ!轉(zhuǎn)載請(qǐng)注明作者和本文鏈接Q砭!>蟊小!乙濒!
這幾天想用laravel上的phpunit測(cè)一個(gè)接口陕赃,結(jié)果運(yùn)行的時(shí)候,出現(xiàn)了
ReflectionException: Class config does not exist
網(wǎng)上搜了下解決方案颁股,說(shuō)是.env配置項(xiàng)的值中有空格么库,比如APP_NAME=test 123,改為APP_NAME="test 123"就好了甘有。然而我檢查了半天也沒(méi)發(fā)現(xiàn).env里面哪項(xiàng)的值是帶空格的诉儒。
怎么辦呢?
首先梧疲,看了下出問(wèn)題的上下文允睹,
//某Model,和數(shù)據(jù)庫(kù)中某表關(guān)聯(lián)
class SomeModel extends Model
{
public static function getRecordByID($id)
{
$record=SomeModel::where('id',$id)->first();
return $record;
}
}
//測(cè)試輔助類
class TestUtil
{
public static function prepareEnvironment()
{
SomeModel::getRecordByID('123');
}
}
//測(cè)試用例類:ATest.php幌氮,里面有個(gè)ACase缭受,代表某具體用例
class ATest extends TestCase
{
protected function setUp()
{
TestUtil::prepareEnvironment();
}
public function testACase()
{
}
}
出問(wèn)題的行在getRecordByID里面,我就猜想是不是數(shù)據(jù)庫(kù)訪問(wèn)有問(wèn)題呢该互?
于是把訪問(wèn)數(shù)據(jù)庫(kù)的代碼米者,直接放在了testACase里,ATest改成了這樣
//測(cè)試用例類:ATest.php宇智,里面有個(gè)ACase蔓搞,代表某具體用例
class ATest extends TestCase
{
public function testACase()
{
SomeModel::getRecordByID('123');
}
}
發(fā)現(xiàn)錯(cuò)誤變成了
Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Operation timed out
那看來(lái)是配置項(xiàng)的問(wèn)題
就按下面的步驟確認(rèn)了一下環(huán)境問(wèn)題:
1.phpunit.xml中的APP_ENV配置是否正確,phpunit默認(rèn)的是testing随橘。如果沒(méi)有testing的env的話喂分,可以改成自己想要的env,也可以建一個(gè)机蔗。
2.在testACase中打印一下APP_ENV蒲祈,DB_CONNECTION甘萧,DB_HOST的信息,查看是否正確梆掸。如果不正確的話扬卷,要查一下是原因,常見(jiàn)的原因有
(1)之前配置緩存沒(méi)清空酸钦,運(yùn)行php artisan config:clear怪得,清空一下配置項(xiàng)再運(yùn)行
(2)加載.env加載錯(cuò)了
(3).env配置項(xiàng)的值寫錯(cuò)了。
最后確認(rèn)了1和2都沒(méi)問(wèn)題了卑硫,錯(cuò)誤就變成了
SQLSTATE[HY000] [2002] No such file or directory
這個(gè)時(shí)候再次上網(wǎng)搜了一下徒恋,說(shuō)DB_HOST不能是localhost,得改成127.0.0.1
這次成功運(yùn)行了欢伏,大功告成因谎!
!Q瞻谩!风皿!轉(zhuǎn)載請(qǐng)注明作者和本文鏈接:拥!M┛睢咸这!