2011-05-18 10 views
5

पर ड्रापल मॉड्यूल का परीक्षण करने के लिए DrupalUnitTestCase का उपयोग करने में विफल रहता है, विफल रहता है। मैं शायद कुछ भूल जाओ।DrupalUnitTestCase के साथ यूनिट परीक्षण ड्रूपल डेटाबेस-सेटअप

परीक्षण ठीक तक समाप्त होने पर मुझे कुछ वर्ग का एक उदाहरण बनाने के लिए:

$foo = new FooBar(); 

उस मामले में, Drupal कुछ जादू करने के लिए फैसला करता है और, डेटाबेस कॉल करने के लिए क्रम में अपनी रजिस्ट्री में कुछ फ़ाइल खोजने के लिए प्रयास करता है ।

Test PDOStatement->execute() failed: <em class="placeholder">PDOException</em>: SQLSTATE[42S02]: Base table [error] 
or view not found: 1146 Table &#039;td_development.simpletest50921registry&#039; doesn&#039;t exist: SELECT 
filename FROM {registry} WHERE name = :name AND type = :type; Array 
(
    [:name] =&gt; FooBar 
    [:type] =&gt; interface 
) 

DrupalUnitTestCase, के रूप में करने का विरोध किया DrupalWebTestCase एक डेटाबेस की स्थापना नहीं है, डिजाइन द्वारा। तो यह क्यों विफल रहता है स्पष्ट है।

हालांकि, मैं नहीं चाहता कि ड्रूपल डेटाबेस में दिखने के लिए जब मैं चाहता हूं कि कुछ उदाहरण बनाना है। अपनी रजिस्ट्री में फ़ाइल को देखने के लिए ड्रूपल से कैसे बचें?

+0

मेरे जैसे खोई हुई आत्माओं के लिए - यह उपयोग केस/त्रुटि एंटीटीज और एंटीटी नियंत्रकों के लिए भी (दुख की बात है) लागू होती है। Interwebz के लाभ के लिए टैगिंग। स्वीकृत (@Berdir) उत्तर में प्रासंगिक जानकारी भी शामिल की गई। –

उत्तर

4

शायद आप नहीं कर सकते।

पेरेंट क्लास के रूप में यूनिटटेस्टकेस का उपयोग करने की संभावनाएं बहुत सीमित हैं। जैसे ही आप कुछ भी करते हैं जिसके लिए डेटाबेस की आवश्यकता होती है (और एक नई कक्षा बनाना क्योंकि ड्रूपल 7 की स्वत: लोड विशेषताएं डेटाबेस पर निर्भर करती हैं), आपको वेबटेस्टकेस का उपयोग करना होगा।

काम करने वाली एकमात्र चीज स्पष्ट रूप से उस वर्ग के लिए आवश्यक सभी फ़ाइलों को शामिल कर सकती है। चूंकि ऑटोलोड केवल तभी बुलाया जाता है जब वर्ग अभी तक अस्तित्व में नहीं है (वह वर्ग भी हो सकता है जिस पर आपकी कक्षा का उपयोग होता है या निर्भर करता है)। लेकिन यह अपेक्षाकृत कमजोर है और आपको हमेशा इन सभी फ़ाइलों को सही क्रम में शामिल करना होगा, जिसका अर्थ है कि आपका यूनिट परीक्षण आपकी कक्षा के आंतरिक कार्यों पर निर्भर करता है। जो भी अच्छा नहीं है।

+0

जब सेटअप() पर मैन्युअल रूप से शामिल किया गया है, तो ड्रूपल को अब एक इरादा बनाने के लिए डेटाबेस की आवश्यकता नहीं है। हालांकि, यह 'DatabaseConnectionNotDefinedException' के साथ थोड़ा और नीचे विफल रहता है। मुझे लगता है कि यह बस "unittests का उपयोग न करें, बजाय webtests का उपयोग करें" करने के लिए उबलता है। धन्यवाद। – berkes

0

इस

spl_autoload_register('your_function'); 
if (function_exists('drupal_autoload_class')) { 
    spl_autoload_unregister('drupal_autoload_class'); 
    spl_autoload_register('drupal_autoload_class'); 
    spl_autoload_unregister('drupal_autoload_interface'); 
    spl_autoload_register('drupal_autoload_interface'); 
} 

यह नीचे करने के लिए Drupal autoload ले जाने और समस्या का समाधान होगा कोशिश कर सकते हैं।

संबंधित मुद्दे