मुझे WP_UnitTestCase फ़ैक्टरी कक्षाओं के लिए दस्तावेज़ कहां मिल सकते हैं?


21

हाल के संस्करणों WP_UnitTestCaseमें एक $factoryसंपत्ति शामिल है ।

उदाहरण के लिए:

$post = $this->factory->post->create();

मुझे इस उपयोगी सुविधा के लिए दस्तावेज़ कहां मिल सकते हैं?

जवाबों:


26

जहाँ तक मुझे पता है, वर्तमान में इसके लिए कोई दस्तावेज नहीं है। आधिकारिक स्रोत यहाँ है

मैंने यूनिट टेस्टिंग वर्डप्रेस प्लगइन्स पर एक ट्यूटोरियल भी लिखा है, जो इस सुविधा के बारे में कुछ विवरण देता है

उपयोग करने के फायदों में से WP_UnitTestCaseएक इसके कारखाने हैं। इन्हें factoryसदस्य चर के माध्यम से एक्सेस किया जा सकता है । factoryगुण है कि में परिभाषित वर्गों में से एक में से प्रत्येक के एक उदाहरण हैं के साथ एक वस्तु है भी शामिल है / factory.php । वे क्या करते हैं, आप पूछते हैं? वे अपने परीक्षण में जहाँ कहीं भी आपको आवश्यकता होती है, उपयोगकर्ताओं, पदों, पदों आदि को बनाने के लिए बहुत सरल बनाते हैं। इसलिए, ऐसा करने के बजाय:

$args = array( /* A bunch of user data you had to make up */ );
wp_insert_user( $args );

आप ऐसा कर सकते हैं:

$user_id = $this->factory->user->create();

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

$user_ids = $this->factory->user->create_many( 25 );

यह 25 उपयोगकर्ताओं को बनाएगा जिन्हें आप अपने परीक्षण में उपयोग कर सकते हैं।

factoryनिम्नलिखित गुण है कि आप उपयोग कर सकते हैं:

  • $post
  • $attachment
  • $comment
  • $user
  • $term
  • $category
  • $tag
  • $blog

इन सभी का उपयोग उसी तरीके से किया जा सकता है जैसा कि $userकारखाने के साथ उपरोक्त उदाहरण में दिखाया गया है । उदाहरण के लिए, आप इस तरह से एक पोस्ट बना सकते हैं:

$this->factory->post->create();

आप ऑब्जेक्ट बनाने के लिए उपयोग करने के लिए विशेष तर्क भी निर्दिष्ट कर सकते हैं। उपरोक्त उदाहरण में हमने एक पोस्ट बनाया है, लेकिन इसे किसी विशेष उपयोगकर्ता को नहीं सौंपा गया है ( post_authorफ़ील्ड डिफ़ॉल्ट होगा 0)। कभी-कभी हम चाहते हैं कि पोस्ट को इसके बजाय किसी उपयोगकर्ता को सौंपा जाए। हम ऐसा करेंगे:

$user_id = $this->factory->user->create();
$post_id = $this->factory->post->create( array( 'post_author' => $user_id ) );

इसके अलावा, यदि आपको आपके द्वारा बनाए जा रहे ऑब्जेक्ट की आईडी से अधिक की आवश्यकता है, तो आपको ऐसा करने की आवश्यकता नहीं है:

$post_id = $this->factory->post->create();
$post = get_post( $post_id );

इसके बजाय, create_and_get()विधि का उपयोग करें :

// $post will be an instance of WP_Post 
$post = $this->factory->post->create_and_get();

इस उदाहरण में, हमने postकारखाने का इस्तेमाल किया , लेकिन सभी कारखानों के लिए भी यही सच है।

मुझे लगता है कि मैं इसका उल्लेख वर्डप्रेस डॉक्स टीम से करूंगा। शायद हम इस सामान को प्लगइन और थीम हैंडबुक में प्राप्त कर सकते हैं।

अपडेट (20 जून, 2015): आप अपने स्वयं के कस्टम कारखाने भी बना सकते हैं !

अद्यतन (27 सितंबर, 2016): वर्डप्रेस 4.4 में कारखानों तक पहुंचने के लिए एक स्थिर factory()तरीका प्रदान करने के लिए परीक्षण अपडेट किए गए थे , हालांकि factoryसंपत्ति अभी भी एक जादू पाने वाले के माध्यम से प्रदान की जाती है।


डोमेन मर चुका है, और इसलिए ट्यूटोरियल के लिए लिंक है। क्या इसे स्थानांतरित कर दिया गया है?
जोश हबदास

@ जोश यह अब वापस हो रहा है। संभवत: आपने इसे तब मारा जब साइट रात (मेरे समयक्षेत्र) के मध्य में बैकअप चला रही थी।
JD

@ जोश मुझे किसी भी इकाई परीक्षण ढांचे का पता नहीं है जो परीक्षणों के लिए प्रक्रियात्मक कोड का उपयोग करते हैं। मुझे वास्तव में संदेह है कि एक प्रक्रियात्मक परीक्षण ढाँचा लगभग वैसे भी एक OO के रूप में काम करेगा, सिर्फ इसलिए कि इसे कैसे काम करना है। हालाँकि, परीक्षण केवल ऑब्जेक्ट-ओरिएंटेड फ्रेमवर्क पर बनाए गए हैं जैसे कि PHPUnit यह निर्धारित नहीं करता है कि वे केवल OO कोड का परीक्षण कर सकते हैं। मेरे पास बहुत सारे प्रक्रियात्मक कोड मेरे प्लगइन्स हैं, और बिल्कुल उसी तरह से इसका परीक्षण करते हैं। वर्डप्रेस इस तरह से बहुत सारे प्रक्रियात्मक कोड का परीक्षण करता है। तो यह कोई समस्या नहीं होनी चाहिए।
JD

धन्यवाद @JD मैं आदर्श रूप से इस तरह से भी अपने परीक्षण लिखना चाहूंगा। लेकिन मैं OOP को प्रस्तुत करूंगा, यह मुख्य कोडलाइन में नहीं है। PS मैंने आपके ब्लॉग पर एक टिप्पणी सबमिट करने का प्रयास किया और एक त्रुटि प्राप्त की। squinty चेहरा भले ही, के लिए 411 धन्यवाद
जोश Habdas

1
@ जोश टिप्पणी के साथ मुद्दे के बारे में सिर के लिए धन्यवाद, यह अब तय किया जाना चाहिए। यह एक अति-विरोधी स्पैम प्लगइन के कारण हुआ।
JD

2

स्रोत कोड पर

https://github.com/rnagle/wordpress-unit-tests/blob/master/includes/factory.php

फिलहाल देखने में सबसे अच्छी जगह लगती है


2
बस अपने प्रश्न से लिंक हटा दें: आप क्या पढ़ेंगे? कृपया हमेशा ऐसे उत्तर लिखें जो बाहरी स्रोतों पर निर्भर न हों। आपके जवाब को नष्ट करने की आवश्यकता है।
कासर

2
@kaiser, मैं देख रहा हूं कि आप कहां से आ रहे हैं, लेकिन मेरे प्रश्न का उत्तर एक लिंक होगा। निश्चित रूप से आप किसी से यह उम्मीद नहीं करेंगे कि वह पूरे दस्तावेज को यहां पोस्ट करे?
djb

2
हां, हम उम्मीद करेंगे कि कोई व्यक्ति यहां सभी प्रासंगिक कोड पोस्ट करेगा । यहां तक ​​कि साइट एफएक्यू में भी लिखा गया है - "लक्ष्य लिंक के अप्राप्य होने या स्थायी रूप से ऑफ़लाइन होने की स्थिति में, हमेशा एक महत्वपूर्ण लिंक का सबसे प्रासंगिक हिस्सा उद्धृत करें।" यह लिंक किए गए संसाधन की संपूर्ण सामग्री नहीं हो सकती है, लेकिन इस मामले में यह हो सकती है। जैसा कि, जब कि GHHub संसाधन अप्राप्य हो जाता है, तो यह उत्तर अर्थहीन हो जाता है।
s_ha_dum
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.