2015-02-10 51 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');