1

jsonペイロードを受け入れるコントローラー関数をテストしようとしています。

testAction()のドキュメントによると、これは$options['data']を適切な文字列に設定することで実行できます。それは私のために働いていません。ここで引用されているドキュメントを参照してください:http://api20.cakephp.org/class/controller-test-case(testAction()セクションを下にスクロールしてください)。

これが私のテストケースです。

public function testCreate(){
    //Some code here
    $this->testAction('/shippingbatches/create', array('data' => '[3,6]', 'method' => 'post'));
    //Some more code here
}

これが私のコントローラー機能です

public function create(){        
    debug($this->request); //This debug shows me an empty array in $this->request->data
    ob_flush();
    $order_ids = json_decode($this->request->data);
    //Some more code here
}

コントローラ関数の最初の行は、$ this->request->dataに空の配列を表示しています。testAction()から渡された「データ」が実際の配列である場合、それはうまくいきます。ただし、文字列に設定されている場合はそうではありません(ドキュメントに記載されている場合とは異なります)。

これがデバッグの出力です。

object(Mock_CakeRequest_ef4431a5) {
    params => array(
        'plugin' => null,
        'controller' => 'shippingbatches',
        'action' => 'create',
        'named' => array(),
        'pass' => array(),
        'return' => (int) 1,
        'bare' => (int) 1,
        'requested' => (int) 1
    )
    data => array()
    query => array(
        'case' => 'Controller\ShippingBatchesController'
    )
    url => 'shippingbatches/create'
    base => ''
    webroot => '/'
    here => '/shippingbatches/create'
}

助けてください。

Gurpreet

4

1 に答える 1

0

このようなデータを渡す場合は、を使用してデータを受信する必要がありますCakeRequest::input()

public function create() {
    $json = $this->request->input('json_decode', true);  
    debug($json);
}

Cakeのテストケースを読んでこれを発見したことに注意してくださいControllerTestCase::testAction。テストケースを読むことで、Cakeの内部がどのように機能するかについての洞察を得ることができ、テストを書くためのヒントを得ることができます。

于 2012-07-26T14:25:56.373 に答える