2016-09-26 5 views
5

मैं PHPUnit के साथ अपने Laravel एप्लिकेशन के लिए कुछ बुनियादी इकाई परीक्षण चलाने की कोशिश कर रहा हूं।लार्वेल: PHPUnit सब कुछ के लिए 404s का कारण बनता है

हालांकि, सभी HTTP अनुरोध 404 नहीं मिला HTTP स्थिति कोड, इसलिए हम पहली बाधा में विफल रहे हैं।

इंटरनेट trawling के बाद, मैं यह कैसे उपाय करने के बारे में जानकारी मिल गया है, लेकिन इनमें से अब तक कोई भी वास्तव में काम:

  • जाँच हो रही है मैं नामित मार्ग सही ढंग से संदर्भित है।
  • यह जांचकर कि इस रूट में नियंत्रक विधि है।
  • यह जांचकर कि यह ब्राउज़र में काम करता है।
  • मैं यह सुनिश्चित किया है अपने आवेदन यूआरएल को सही स्थानों पर ठीक से सेट है: TestCase::$baseUrl, Config->app->url ... इसके सेट http://localhost/myappfolder
  • को मैं एक HTTP प्रतिक्रिया प्राप्त करने के लिए मेरी इकाई परीक्षण तरीकों के भीतर से विभिन्न तरीकों की कोशिश की है वस्तु। अब तक सभी परिणाम 404: $this->route(), $this->action(), $this->call() में परिणाम।
  • मैंने अपने नियंत्रकों से रूट सुरक्षा मिडलवेयर के सभी संदर्भों को हटाने का प्रयास किया है। मेरा मानना ​​है कि यूनिट परीक्षण चलाते समय यह अक्षम है, लेकिन मैंने यह किया है क्योंकि मैं इस समस्या का निदान करने की कोशिश कर अपने प्रोवर्बियल बालों को खींच रहा हूं। कोई प्रभाव नहीं।
  • मेरे एप्लिकेशन की जड़ फ़ाइल में कई PHP require एस हैं जिनमें छोटी रूट फ़ाइलें शामिल हैं। टेलर ओटवेल ने पहले कहा था कि इस तरह की एक रूट फाइल है, लेकिन require_once युक्त इन 404 त्रुटियों का कारण बन सकता है। वह require में बदलने का सुझाव देता है। कुछ डेवलपर्स रिपोर्ट करते हैं कि यह उनके लिए इसे ठीक करता है, लेकिन मेरा अभी भी require है। मैंने मार्गों को मुख्य मार्ग फ़ाइल में वापस ले जाने का भी प्रयास किया है, लेकिन यह भी काम नहीं किया है।

जांच आमतौर पर असामान्य किया गया है:

  • अगर मैं Illuminate\Foundation\Testing\Concerns भीतर route() विधि संपादित यूआरएल उत्पन्न बाहर मुद्रित करने के लिए, यह वास्तव में पूरी तरह से गठन: http://localhost/myprojectfolder/route-url-text। ब्राउज़र में इस पृष्ठ का दौरा ठीक काम करता है। कर्ल के साथ इसका दौरा भी काम करता है। जेनरेट किए गए यूआरएल पर $this->call() चल रहा है, और उसके बाद PHPUnit चल रहा है 404 फिर से दिखाता है। तो यह सिर्फ अजीब कुछ कर रहा है।

यहाँ कोड मैं इकाई परीक्षण लिपि में उपयोग कर रहा हूँ है:

public function testThis() 
{ 
    $response = $this->route('GET', 'myRouteName', [ 
     'myParam' => 5 
    ]); 
    dd($response->status()); // 404 - always! 
} 

इसकी तरह कुछ में कदम है और स्पष्ट रूप से एक 404 फेंक ... वास्तव में सराहना करते हैं अगर कोई प्रकाश डाला सकता है इस पर।

+0

यह अजीब लग रहा है, लेकिन अगर आप सीधे बाद में एक और मार्ग कहते हैं तो क्या होता है? क्या आपको 200 मिलते हैं? मेरे पास अतीत में एक समान समस्या थी, लेकिन समाधान कभी नहीं मिला – Aron

+0

यह अजीब लगता है ... लेकिन मैं सुझाव की सराहना करता हूं। मैंने उत्तराधिकार में कुछ अनुरोध किए हैं। अभी भी 404 प्राप्त करें। – kohloth

+0

आह क्षमा करें मैं और अधिक सहायता नहीं कर सकता। लार्कास्ट मंच पर भी इस मुद्दे को पोस्ट करना सार्थक हो सकता है – Aron

उत्तर

1

समस्या हल हो गई। मेरे पास app/Providers/AppServiceProvider.php के अंदर था। सामूहिक phpunit समस्या निवारण गाइड में जोड़ने के लिए कुछ!

public function boot() 
{ 
    URL::forceRootUrl(Config::get('app.url')); 
} 

मैं करने के लिए इस बदल गए हैं:

public function boot() 
{ 
    if (!defined('PHPUNIT_RUNNING')) { 
     URL::forceRootUrl(Config::get('app.url')); 
    } 
} 

और यह insite डाल phpunit.xml

<php> 
    <const name="PHPUNIT_RUNNING" value="true"/> 
</php> 
1

Laravel5.5 (विक्रेता/laravel/रूपरेखा/src/रोशन/फाउंडेशन/परीक्षण/चिंताएं/MakesHttpRequests.php)

public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null) 
{ 
    $kernel = $this->app->make(HttpKernel::class); 
    $files = array_merge($files, $this->extractFilesFromDataArray($parameters)); 
    $symfonyRequest = SymfonyRequest::create(
     $this->prepareUrlForRequest($uri), $method, $parameters, 
     $cookies, $files, array_replace($this->serverVariables, $server), $content 
    ); 
    $response = $kernel->handle(
     $request = Request::createFromBase($symfonyRequest) 
    ); 
    if ($this->followRedirects) { 
     $response = $this->followRedirects($response); 
    } 
    $kernel->terminate($request, $response); 

    return $this->createTestResponse($response); 
} 

यह स्पष्ट है कि laravel दूरस्थ करने के लिए अनुरोध नहीं भेजा था:

$response = $kernel->handle(
    $request = Request::createFromBase($symfonyRequest) 
); 

आप सह धोखे का उपयोग करना चाहिए।

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