2013-09-26 43 views
6

我使用PHPUnit並試圖檢查文本是否存在於頁面上。 assertRegExp的作品,但使用if語句我得到的錯誤Failed asserting that null is true.如果找到正則表達式文本,PHPUnit assertTrue?

我知道$ test返回null,但我不知道如何讓它返回1或0或true/false如果文本存在?任何幫助表示感謝。

 $element = $this->byCssSelector('body')->text(); 
     $test = $this->assertRegExp('/find this text/i',$element); 

     if($this->assertTrue($test)){ 
      echo 'text found'; 
     } 
     else{ 
      echo 'not found'; 
     } 
+0

assertSomething()不屬於if語句。它是一個孤立存在的物種。所以至少對我而言,你不知道你在這裏做什麼。通常在單元測試中也沒有涉及輸出。我可以問你爲什麼要/需要這樣做嗎? – hakre

+0

@hakre如果頁面上存在文本,我需要開始運行不同的功能。我怎樣才能爲此寫一個條件? – Anagio

+0

你爲什麼想要?這是單元測試,在沒有條件的情況下工作得很好。 – hakre

回答

15

assertRegExp()將不會返回任何內容。如果斷言失敗 - 這意味着該文本沒有被發現 - 然後將下面的代碼不會得到執行:

$this->assertRegExp('/find this text/i',$element); 
// following code will not get executed if the text was not found 
// and the test will get marked as "failed" 
4

PHPUnit的目的不是要斷言從返回值。根據定義,斷言意味着在失敗時打破流程。

如果您需要這樣做,爲什麼您要使用PHPUnit?使用preg_match

$test = preg_match('/find this text/i', $element); 

if($test) { 
     echo 'text found'; 
} 
else { 
     echo 'text not found'; 
} 
+0

PHPUnit IS旨在支持這樣的操作。看看@ hek2mgl答案。 –

+0

這取決於你所指的_such operations_。我的意思是PHPUnit不是爲了從斷言返回值而設計的。根據定義,斷言意味着在失敗時打破流程。如果你想在'if'語句中使用正則表達式匹配的結果,那麼'preg_match'就是要走的路。 –

+1

我現在得到了你。在我看來,你試圖說「像assertRegExp」這樣的「操作」。 –