0

\Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCaseクラスを使用してコントローラーのテストを行うときに問題が発生しました。
メソッドの 3 番目のパラメーターがAbstractHttpControllerTestCase::dispatch()多次元配列を受け入れないようです。

例えば

$this->dispatch('/controller/action', 'PUT', array('field1' => 'value1', 
                                                   'field2' => array(2,4)). 

$this->url()を使用する場合、メソッドは配列値を受け入れないため、上記のメソッド呼び出しは例外をスローし'PUT'ます。'POST'使っていないのでOKですsetContent()

フォームにチェックボックスがあり、複数の値が送信される場合をテストしたかったため、配列値を使用する必要があります。

誰かが同じ問題に遭遇し、回避策を見つけたのではないかと思います。メソッドをオーバーライドできますが、$this->url()それが正しく行われていないかどうかはよくわかりません。

どんな助けでも大歓迎です!

4

1 に答える 1

0

その間、配列値を処理するために $this->url() メソッドをオーバーライドする必要がありました。

これは私が変えなければならなかったものです、

elseif ($method == HttpRequest::METHOD_PUT) {
        array_walk($params, function(&$item, $key)
                {
                    if (is_array($item)) {
                        $oldItem = $item;
                        $item = '';
                        foreach ($oldItem as $value) {
                            $item = ($item ? $item . "&" : $item);
                            $item .= $key . '[]=' . $value;
                        }
                    } else {
                        $item = $key . '=' . $item;
                    }
                }
        );
        $content = implode('&', $params);

        $request->setContent($content);
}
于 2013-10-03T10:15:53.233 に答える