WebGuy seeResponseContainsJson没有按预期解析

时间:2014-02-03 13:01:50

标签: codeception

我有一些接受测试,我的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解析像它一样爆炸。有什么想法吗?

1 个答案:

答案 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,
            ),
        ),
    ),
));

我的测试现在正在通过。现在这已足够,但是处理空数组可能是未来的功能请求吗?