Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डेटाबेस लार्वा के परीक्षण में समस्या 7.x

सबसे पहले, आशा है कि मैं आपकी समस्या को ठीक करने में आपकी मदद कर सकता हूं क्योंकि मुझे पूरा यकीन है कि यह एक मूर्खतापूर्ण गलती है जो आप कनेक्शन में कहीं कर रहे हैं।

तो, यहां कुछ सुझाव दिए गए हैं:

अपने कोड "इनवोकिंग" कोर फ्रेमवर्क कोड का परीक्षण न करें...

करने के बजाय (इकाई परीक्षण):

$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);

इस तरह, आप यह सुनिश्चित कर सकते हैं कि:

  1. आपका URL वही है जो आप चाहते हैं, बिना किसी टाइपो या किसी त्रुटि के
  2. नियंत्रक वह कर रहा है जो उसे करना चाहिए, इस मामले में डेटा सम्मिलित करना।
  3. नियंत्रक वह डेटा सम्मिलित कर रहा है जिसे आप सम्मिलित करना चाहते हैं। मान लीजिए कि आपके पास पर्दे के पीछे कुछ प्रसंस्करण है, यहां आप यह सुनिश्चित कर सकते हैं कि आपने "1 और 3" भेजा है और इसमें "रोल एक्स" डाला गया है (यह एक उदाहरण है, मान लीजिए कि 1 और 3 को संसाधित करने के बाद आपका वांछित परिणाम होगा, इसलिए आप सीधे 1 और 3 नहीं डाल रहे हैं )
  4. हमेशा बचें डेटा का दावा करना जहां से आप इसका परीक्षण कर रहे हैं। आपके मामले में, आप अनुरोध . का उपयोग कर रहे हैं ऑब्जेक्ट, मान लें कि यह आपकी कस्टम क्लास है, और जब आप $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 करने से बचने का प्रयास करें क्योंकि:

  1. यदि आपका नियंत्रक Defi से संबंधित है , "यह DEF डेटा है" कहने की कोई आवश्यकता नहीं है, हम पहले से ही जानते हैं, इसलिए आप सीधे कुछ कर सकते हैं . डेटाबेस के लिए समान, यदि तालिका का नाम cars . है , car_wheels करने से बचें , car_doors , आदि, पहिए do करें , दरवाजे , आदि.
  2. X_Y करने से बचें , करना पसंद करते हैं x_y , डेटाबेस के लिए समान। हमेशा लोअरकेस पर टिके रहें और डेटाबेस के लिए snake_case . से चिपके रहें , लेकिन मॉडल की विशेषताओं के लिए, हमेशा camelCase . से चिपके रहें . (अधिक जानकारी मामलों के बारे में)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Percona 5.6 InnoDB समस्या अनुक्रमणिका का सही ढंग से उपयोग नहीं कर रही है

  2. एक प्रश्न में दो तालिकाओं से पंक्तियों की गणना कैसे करें?

  3. php के साथ mysql में एकाधिक भाषा टेक्स्टफील्ड कैसे स्टोर करें?

  4. xampp mysql मल्टी मास्टर स्ट्रक्चर को इनिशियलाइज़ करने में विफल

  5. एक ही कॉलम मान के साथ mysql पंक्तियों को एक पंक्ति में कैसे समूहित करें?