2015-03-04 5 views
7

यहाँ PHPUnit क्या कहते है:PHPUnit जोर देते हुए कि दो सरणियों बराबर हैं विफल रहता है, लेकिन कोई फर्क नहीं चलता

1) Asgard\Entity\Tests\EntityTest::testToArray 
Failed asserting that two arrays are equal. 
--- Expected 
+++ Actual 
@@ @@ 
Array (
    'id' => null 
    'title' => 'Test Title' 
    'content' => 'Test Content' 
    'published' => 2015-03-04T11:19:50+0000 
    'comments' => Array (
     0 => Array (
      'id' => null 
      'content' => 'foo' 
      'published' => 2015-03-04T11:19:50+0000 
      'another_property' => null 
      'news' => null 
     ) 
     1 => Array (
      'id' => null 
      'content' => 'bar' 
      'published' => 2015-03-04T11:19:50+0000 
      'another_property' => null 
      'news' => null 
     ) 
     2 => Array (
      'id' => null 
      'content' => 'baz' 
      'published' => 2015-03-04T11:19:50+0000 
      'another_property' => null 
      'news' => null 
     ) 
    ) 
    'another_property' => null 
) 

https://travis-ci.org/asgardphp/asgard/jobs/53029084

"उम्मीद" और "वास्तविक" के बीच कोई अंतर नहीं है। आमतौर पर परीक्षण पास होते हैं, लेकिन कभी-कभी इस पर असफल हो जाते हैं।

+0

परीक्षण हमेशा PHP 5.6 के साथ विफल रहता है? – Matteo

+0

अभी तक हाँ, मैंने केवल php 5.6 – leyou

+0

के साथ विफल होने को देखा है, मेरे पास अभी तक PHP 5.6 नहीं है। 5.5 और 5.3 के साथ मैं आपकी समस्या को दोहराना नहीं कर सकता। – Matteo

उत्तर

1

चूंकि आप अपने परीक्षणों में डेटटाइम का उपयोग कर रहे हैं - क्या आप वाकई परीक्षण प्राप्त नहीं कर रहे हैं जो एक सेकंड में शुरू होता है, और दूसरे में खत्म होता है, इसलिए टाइमस्टैम्प में दूसरा अंतर होता है जिस पर आप उन्हें देखते हैं ? - परीक्षणों में गतिशील तिथियों और समय का प्रयोग कभी-कभी असफल परीक्षणों के लिए एक आम आम कारण है।

+0

डेटाटाइम ऑब्जेक्ट केवल एक बार उत्पन्न होता है और वास्तविक और अपेक्षित परिणामों दोनों द्वारा उपयोग किया जाता है। और वैसे भी, अगर यह समस्या भी थी, तो phpunit को अपेक्षित/वास्तविक अंतर में अंतर दिखाना चाहिए। – leyou

+0

बहुत बहुत धन्यवाद, मैं इस संकेत के बिना घंटों बर्बाद कर देता था कि समय-समय पर समस्या का कारण बन सकता है। मेरी समस्या थोड़ी अलग थी, हालांकि, मैंने लार्वेल (कार्बन) से डिफ़ॉल्ट रूपांतरित किया था, यह एक अलग प्रारूप (iso8601) का उपयोग करने के बाद काम करता था। – Maaaaa

4

समस्या मिली। तत्व एक ही क्रम में नहीं थे। थोड़ा परेशान हालांकि यह आउटपुट इसे नहीं दिखाता है।

मैं साथ assertEquals जगह ले ली है:

$this->assertTrue($this->similar_arrays($arr1, $arr2)); 

protected function similar_arrays($a, $b) { 
    if(is_array($a) && is_array($b)) { 
     if(count(array_diff(array_keys($a), array_keys($b))) > 0) 
      return false; 

     foreach($a as $k => $v) { 
      if(!$this->similar_arrays($v, $b[$k])) 
       return false; 
     } 

     return true; 
    } 
    else 
     return $a === $b; 
} 
0

चेक अगर आप अपने मूल्यों में EOL है।

तुम इतनी तरह एक मूल्य है:

'x' => 'line1 

पंक्ति 2 '

को

'x' => "line1\nline2" 

नोट यह परिवर्तन: इस प्रत्यक्ष मुद्दा ओपी था का जवाब नहीं हो सकता है, लेकिन यह है मेरे लिए क्या काम किया

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