Codeception - 如何检查响应与xpath不匹配

时间:2015-01-15 08:50:53

标签: rest testing xpath codeception

我有以下问题 - 我想用Codeception测试REST api。

当我想在JSON响应中确保我有数组:

'data' => [
   'sth' => 'whathever'
]

我可以这样使用seeResponseJsonMatchesXpath

$I->seeResponseJsonMatchesXpath('//data/sth');

但是,如果我想确保我没有回应,该怎么办?我想用例如:

$I->seeResponseJsonMatchesXpath('//data');
$I->dontSeeResponseJsonMatchesXpath('//data/sth');

但很明显,Codeception中没有dontSeeResponseJsonMatchesXpath方法。

我也不知道sth中的确切值是什么,所以我可能无法在dontSeeResponseContainsJson使用。

问题是 - 如何进行以下检查?

1 个答案:

答案 0 :(得分:1)

(免责声明:完全不熟悉代码,只有XPath)

JSON is not supposed to be checked against XPath。但你可能做的检查是

$I->seeResponseJsonMatchesXpath('not(//data/sth)');

如果没有true1,那么会返回datasth,如果有,则返回false0。< / p>


编辑:作为对您评论的回复:

  

这可能是我需要的东西,但我想确保只有数据不存在于数据内部而数据应该存在(但我不需要在此表达式中检查它)

表达已完全相同 - not(//data/sth)会为

等文档返回false
<data>
  <sth/>
</data>

但仅对包含true的文档返回data

<data/>

或其他任何东西。但在我看来,将JSON转换为XML可能存在陷阱。


  

我检查了两个解决方案 - 你的和//数据/不是(某事)但它似乎无法正常工作

是的,这不起作用,因为您使用的是XPath 1.0引擎。您的尝试将是一个有效的XPath 2.0表达式。使用以下表达式独立测试datasth

//data and not(//data/sth)

如果至少存在一个true元素,并且没有data元素作为子元素,那么这只返回data