सबसे पहले, आशा है कि मैं आपकी समस्या को ठीक करने में आपकी मदद कर सकता हूं क्योंकि मुझे पूरा यकीन है कि यह एक मूर्खतापूर्ण गलती है जो आप कनेक्शन में कहीं कर रहे हैं।
तो, यहां कुछ सुझाव दिए गए हैं:
अपने कोड "इनवोकिंग" कोर फ्रेमवर्क कोड का परीक्षण न करें...
करने के बजाय (इकाई परीक्षण):
$request = new Request();
$request->DEF_NOM = 'test';
$request->DEF_DESCRIPTION = 'testdescriptio ajhsg ln';
$request->DEF_NBSEMAINES = 2;
$request->DEF_CONSEILS = 'jhasnciu launh sl';
$request->DEF_VISIBLE = 1;
$request->DEF_DATE_VISIBLE = Carbon::now()->toDate();
$request->COA_ID = 3;
$dfc = new DefiCoachController();
$response = $dfc->createDefiTest($request);
$this->assertDatabaseHas('cbs_defis', $request->all());
करो (फीचर टेस्ट):
$data = [
'nom' => 'test',
'description' => 'testdescriptio ajhsg ln',
'nbsemaines' => 2,
'conseils' => 'jhasnciu launh sl',
'visible' => 1,
'date_visible' => Carbon::now()->toDate(),
'coa_id' => 3,
];
$response = $this->post('your_desired_url_for_this_action', $data); // This can be get, post, put or delete
$this->assertDatabaseHas('cbs_defis', $data);
इस तरह, आप यह सुनिश्चित कर सकते हैं कि:
- आपका URL वही है जो आप चाहते हैं, बिना किसी टाइपो या किसी त्रुटि के
- नियंत्रक वह कर रहा है जो उसे करना चाहिए, इस मामले में डेटा सम्मिलित करना।
- नियंत्रक वह डेटा सम्मिलित कर रहा है जिसे आप सम्मिलित करना चाहते हैं। मान लीजिए कि आपके पास पर्दे के पीछे कुछ प्रसंस्करण है, यहां आप यह सुनिश्चित कर सकते हैं कि आपने "1 और 3" भेजा है और इसमें "रोल एक्स" डाला गया है (यह एक उदाहरण है, मान लीजिए कि 1 और 3 को संसाधित करने के बाद आपका वांछित परिणाम होगा, इसलिए आप सीधे
1 और 3
नहीं डाल रहे हैं ) - हमेशा बचें डेटा का दावा करना जहां से आप इसका परीक्षण कर रहे हैं। आपके मामले में, आप
अनुरोध
. का उपयोग कर रहे हैं ऑब्जेक्ट, मान लें कि यह आपकी कस्टम क्लास है, और जब आप$request->attribute1 =2
करते हैं तो आप कुछ करते हैं , इसलिए जब आप इसे वापस$request->attribute1
. के रूप में पढ़ते हैं हो सकता है कि आपने इसे स्टोर करने के लिए कुछ प्रक्रिया की हो और आपने इसे संशोधित किया हो ... यदि आप जोर दे रहे हैं कि बिना स्पष्ट रूप से कहे आप इसे कभी भी दावा नहीं कर रहे हैं। यदि आपके कोड में कोई गलती है औरb
returning को वापस करने के बजाय (1
=ए
,2
=बी
, आदि) कोड हमेशा पास होगा, क्योंकि आपने इसे अपेक्षा से कुछ और के रूप में संग्रहीत किया है, लेकिन आप इसके लिए जोर दे रहे हैं (मान लें कि आपकी गलती वापस आ गई हैc
b
. के बजाय ) तो आप कह रहे हैं "ढूंढें$request->attribute1
डेटाबेस में" और आपनेc
. स्टोर कर लिया होगाb
. के बजाय (आपका अपेक्षित मूल्य) और यह अभी भी इसे ढूंढेगा और परीक्षा पास करेगा।
नया कनेक्शन
बनाने की कोई आवश्यकता नहीं है अगर यह DB_DATABASE
. को छोड़कर समान है या इसी के समान। उस स्थिति में, आप बस उस जानकारी को .env.testing
. में परिभाषित करें या आपके phpunit.xml
. में ।
साथ ही,
करने की कोई आवश्यकता नहीं है और
. अगर आपको Laravel GitHub का phpunit.xml
दिखाई देता है , आप देखेंगे कि वे बदल गए हैं
करने के लिए <सर्वर>
5.7+ पर, इसलिए अपने संस्करण से मेल खाने वाले से चिपके रहें। हालांकि एक अंतर है कि मुझे अभी याद नहीं आ रहा है, लेकिन परीक्षण के लिए, कोई समस्या नहीं है।
इसलिए, सुनिश्चित करें कि आपने सही DB_HOST
सेट किया है , डीबी_पोर्ट
, DB_USERNAME
और डीबी_पासवर्ड
. आपके पास एक ही होस्ट लेकिन अलग पोर्ट हो सकता है, या आपके पास एक ही होस्ट और पोर्ट हो सकता है लेकिन अलग-अलग डेटाबेस नाम, लेकिन एक ही उपयोगकर्ता नाम और पासवर्ड हो सकता है। इसलिए सुनिश्चित करें कि आप सही डेटाबेस से जुड़ रहे हैं।
चूंकि आपकी त्रुटि यह है कि यह वांछित तालिका नहीं ढूंढ सकता है, स्पष्ट रूप से आप डेटाबेस से जुड़ रहे हैं, इसलिए उपयोगकर्ता नाम और पासवर्ड आपकी समस्या नहीं होनी चाहिए, लेकिन तालिका मौजूद नहीं है।
एक आखिरी महत्वपूर्ण बात, क्या आप अपने परीक्षणों में किसी विशेषता का उपयोग कर रहे हैं? डेटाबेस को स्वचालित रूप से माइग्रेट करने और समाप्त होने पर इसे वापस रोल करने के लिए कुछ लक्षण हैं, इसलिए आपको परीक्षण वातावरण में अपने माइग्रेशन को मैन्युअल रूप से सिंक करने की कोई आवश्यकता नहीं है। आपको RefreshDatabase का उपयोग करना चाहिए;
ऐसा करने की विशेषता।
अंतिम युक्ति, DEF_SOMETHING
करने से बचने का प्रयास करें क्योंकि:
- यदि आपका नियंत्रक
Defi
से संबंधित है , "यह DEF डेटा है" कहने की कोई आवश्यकता नहीं है, हम पहले से ही जानते हैं, इसलिए आप सीधेकुछ
कर सकते हैं . डेटाबेस के लिए समान, यदि तालिका का नामcars
. है ,car_wheels
करने से बचें ,car_doors
, आदि,पहिए
do करें ,दरवाजे
, आदि. X_Y
करने से बचें , करना पसंद करते हैंx_y
, डेटाबेस के लिए समान। हमेशा लोअरकेस पर टिके रहें और डेटाबेस के लिएsnake_case
. से चिपके रहें , लेकिन मॉडल की विशेषताओं के लिए, हमेशाcamelCase
. से चिपके रहें . (अधिक जानकारी मामलों के बारे में)