基本的に同じパターンの 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 解析を爆発させる理由の証拠はないようです。何か案は?