我有一些接受测试,我的REST API基本上都是相同的模式:
<?php
$I = new WebGuy($scenario);
$I->wantTo('Do something');
$I->haveHttpHeader('Accept', 'application/hal+json');
$I->sendGET('contact/1/website');
$I->seeResponseCodeIs(200);
$I->seeResponseIsJson();
$I->seeResponseContainsJson(array(...
我的一些测试中的问题出现在seeResponseContainsJson中。给出JSON响应:
{
_links: {
self: {
href: "http://myurl/api/v1/contact/1/website"
}
describedBy: {
href: "http://myurl/api/v1/documentation/collection"
}
}
_embedded: {
items: [1]
0: {
id: 1
label: "Personal Site"
url: "http://someurl.com"
_links: {
self: {
href: "http://myurl/api/v1/contact/1/website/1"
}
}
}
}
}
当尝试使用seeResponseContainsJson测试响应的格式时,我有以下内容:
$I->seeResponseContainsJson(array(
'_links' => array(
'self' => array(
'href' => $baseUrl . 'contact/1/website'
),
'describedBy' => array(
'href' => $baseUrl . 'documentation/collection'
),
),
'_embedded' => array(
),
));
问题是这总是失败。但是,如果我删除了_embedded:
的检查$I->seeResponseContainsJson(array(
'_links' => array(
'self' => array(
'href' => $baseUrl . 'contact/1/website'
),
'describedBy' => array(
'href' => $baseUrl . 'documentation/collection'
),
),
));
一切正常。据我所知,响应是一样的,并且似乎没有任何证据证明为什么_embedded会导致JSON解析像它一样爆炸。有什么想法吗?
答案 0 :(得分:0)
似乎seeResponseContainsJson不处理空数组。如果我进一步实现我声明响应的内容,直到没有空数组:
$I->seeResponseContainsJson(array(
'_links' => array(
'self' => array(
'href' => $baseUrl . 'contact/1/website'
),
'describedBy' => array(
'href' => $baseUrl . 'documentation/collection'
),
),
'_embedded' => array(
'items' => array(
array(
'id' => 1,
),
),
),
));
我的测试现在正在通过。现在这已足够,但是处理空数组可能是未来的功能请求吗?