2015-02-10 50 views
0

我在測試中遇到了問題。所以,我有場景:如何驗證某個密鑰是否在Behat陣列中

Scenario: Teste la route /settlement/rank/types 
Given I request "http:/localhost/admin" 
Then the response should be JSON 
And I should have code with value 200 
And I should have error with value 0 
And The response has a "aUser" property 
And This property "aUser" is not empty 
And The property "aUser" has the keys: 
      |id_user |login |first_name |last_name |email |id_company |enable |id_language |label_language | 

現在FeatureContext是:

/** 
* @Given /^The property "([^"]*)" has the keys:$/ 
*/ 
public function thePropertyHasTheKeys($aProperty, TableNode $table){ 
    $data = json_decode($this->_response->getBody(true),true); 
    foreach($table as $value){ 
     print_r($value['id_user']); 
     if(!in_array($value,$data['data'][$aProperty])){ 
      throw new Exception("The property ".$value. " is not set\n"); 
     } 
    } 
} 

$data我有這種形式的數組:

|id_user |login |first_name |last_name |email |id_company |enable |id_language |label_language | 

所以我想在陣列比較$data與數組0123',如果密鑰相同。

回答

1

也許這樣的事情?

$data = json_decode($this->_response->getBody(true),true); 
foreach($table as $key=>$value) 
{ 

    if(!isset($data[$key])) { throw new Exception("The key ".$key. " is not set\n"); } 
    if($data[$key]!=$value) { throw new Exception("The value ".$value. " is wrong\n"); } 
} 
+0

日Thnx安德魯。 ... – 2015-02-10 12:34:00

0

我喜歡重用別人的代碼,使其一點更明顯,以正在發生的事情 - 在這種情況下,PHPUnit的有很多東西得好:

// outside the test class 
require_once 'PHPUnit/Framework/Assert/Functions.php'; 

// convert $table to a clean array .... 

// compare 
$data = json_decode($this->_response->getBody(true), true); 
assertEquals($table, $data, 'Decoded JSON does not match the given example');