2016-06-30 4 views
11

मैं वर्तमान में एक लार्वा पैकेज तैयार कर रहा हूं जो में Macros के माध्यम से एक नई विधि इंजेक्ट करता है। जिस विधि को मैं इंजेक्शन कर रहा हूं उसे पूरा कर लिया गया है और अच्छी तरह से काम करने की उम्मीद है, लेकिन मैं इसे जारी करने से पहले इसका परीक्षण करना चाहता हूं।लार्वेल 5 पैकेज में किसी परीक्षण में हेडर स्वीकार करने का अनुकरण कैसे करें?

मेरा परीक्षण मुझे यह देखने के लिए अनुरोध है कि परीक्षण पास हो रहा है या नहीं, मेरे अनुरोध के लिए मुझे अनुरोध Accept शीर्षलेख बदलने की आवश्यकता है। इसलिए मैं अनुरोध को दिखाने का निम्नलिखित किया है:

// package/tests/TestCase.php 

namespace Vendor\Package; 

use Illuminate\Http\Request; 
use Orchestra\Testbench\TestCase as Orchestra; 

abstract class TestCase extends Orchestra 
{ 
    /** 
    * Holds the request 
    * @var Illuminate\Http\Request 
    */ 
    protected $request; 

    /** 
    * Setup the test 
    */ 
    public function setUp() 
    { 
     parent::setUp(); 

     $this->request = Request::capture(); 

     $this->request->headers->set('Accept', 'application/x-yaml'); 
    } 
} 

फिर अपने परीक्षण में मैं विधि मैं $this->request->wantsYaml() साथ Request में इंजेक्शन लगाने कर रहा हूँ उपयोग करें और यह हमेशा गलत लौटा रहा है के बाद से Accept हैडर application/x-yaml के लिए सेट नहीं हो रही है।

class RequestTest extends TestCase 
{ 
    /** @test */ 
    public function it_should_return_a_bool_if_page_wants_yaml_or_not() 
    { 
     dump($this->request->wantsYaml()); // Return false 

     $this->assertTrue($this->request->wantsYaml()); // It fails! 
    } 
} 

लैरवेल पैकेज विकास में परीक्षण में हेडर को अनुकरण करने के लिए मैं कैसे जा सकता हूं?


संपादित

यह मेरा YamlRequest वर्ग

use Illuminate\Http\Request; 
use Illuminate\Support\Str; 

class YamlRequest extends Request 
{ 
    /** 
    * Acceptable content type for YAML. 
    * @var array 
    */ 
    protected $contentTypeData = ['/x-yaml', '+x-yaml']; 

    /** 
    * Determine if the current request is asking for YAML in return. 
    * 
    * @return bool 
    */ 
    public function wantsYaml() 
    { 
     $acceptable = $this->getAcceptableContentTypes(); 

     // If I dd($acceptable), it comes out as empty during tests! 

     return isset($acceptable[0]) && Str::contains($acceptable[0], $this->contentTypeData); 
    } 
} 

तो मैं सचमुच क्रम में स्वीकार करें देखने के लिए अनुकरण करने के लिए है, तो मेरी wantsYaml विधि अपेक्षानुसार कार्य कर रही है।

+0

कृपया अपनी कक्षा या कक्षा का हिस्सा शामिल करें जहां आप इसे करना चाहते हैं और आप इस कक्षा –

+0

में अनुरोध ऑब्जेक्ट को पास/बनाते हैं, 'उपयोग' कथन जोड़ा गया। – Aborted

+0

@ मार्सीनबाबियाक किस वर्ग का आपका मतलब है? मैं केवल अपने परीक्षणों के लिए सामग्री-प्रकार शीर्षलेख अनुकरण करना चाहता हूं। मेरा कोड काम करता है (मुझे विश्वास है), लेकिन इसे साबित करने के लिए मुझे अपने परीक्षणों में इस अनुकरण की आवश्यकता है। – Aborted

उत्तर

-1

ठीक है, मैं नहीं जानता कि आप कैसे अपने कोड में इस YamlRequest का उपयोग ईमानदार होना लेकिन मुझे लगता है यहाँ 2 समस्याओं देखते हैं:

1) अपने परीक्षण में आप Illuminate\Http\Request वस्तु और नहीं YamlRequest वस्तु बना सकते हैं - है यह सही है? मेरे लिए ऐसा लगता है लेकिन शायद यह

2) दूसरी बात विधि का कोड होना चाहिए। अपने विधि कार्यान्वयन को देखते हुए अगर मैं कुछ इस तरह के परीक्षण के कोड बदलने क्योंकि getAcceptableContentTypes() विधि Accept शीर्षक और नहीं Content-Type

हो जाता है आप अमान्य हैडर सेट:

$request = new \App\Http\Requests\YamlRequest(); 
$request->headers->set('Accept', 'application/x-yaml'); 
$this->assertTrue($request->wantsYaml()); 

यह गुजरता है। लेकिन मुझे Accept शीर्षलेख का उपयोग करना था और Content-Type नहीं था। मुझे लगता है कि यह त्रुटि है।

+0

मुझे उस हिस्से को समझाने के लिए खेद है जैसा मेरे पास होना चाहिए। मैं एक मैक्रो का उपयोग करता हूं (लैरावेल में मैक्रोबल विशेषता देखें) और मैं पैकेज के सेवा प्रदाता के माध्यम से YamlRequest इंजेक्ट करता हूं, इसलिए मेरे पास 'अनुरोध' वर्ग में 'wantYaml()' विधि उपलब्ध है। मेरी टेस्टकेस कक्षा में, मैंने 'सेटअप' विधि में हेडर को 'स्वीकार करें' पर स्विच करने का प्रयास किया, लेकिन यह काम नहीं किया। मैं उपरोक्त अपना कोड अपडेट करूंगा। – Aborted

+0

यह अभी भी परिवर्तन btw – Aborted

+0

के साथ काम नहीं करता है, कृपया यह भी मान लें कि यह सब असली "एप्लिकेशन" भाग के बिना एक लार्वेल पैकेज के अंदर हो रहा है! – Aborted

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