2

ウェブサイトの「投稿」セクションのどこからでも「ユーザーの追加」ページにアクセスすると、ユーザーを追加した後にユーザーが「ユーザー」インデックスに移動するようにコードを配置しました。ただし、Web サイトの他のセクションから「ユーザーの追加」ページにアクセスすると、ユーザーは、ユーザーを追加した後の元の場所に戻ります。これをテストしたいのですが、方法がわかりません。これは私がこれまでに持っているものです:

コントローラーコード

<?php
App::uses('AppController', 'Controller');

class UsersController extends AppController {

    public function add() {
        if ($this->request->is('post')) {
            $this->User->create();
            if ($this->User->save($this->request->data)) {
                $this->Session->setFlash(__('The user has been saved'));
                return $this->redirect($this->request->data['User']['redirect']);
            } else {
                $this->Session->setFlash(__('The user could not be saved. Please, try again.'));
            }
        }
        else {
            if ($this->referer() == '/' || strpos($this->referer(), '/posts') !== false) {
                $this->request->data['User']['redirect'] = Router::url(array('action' => 'index'));
            }
            else {
                $this->request->data['User']['redirect'] = $this->referer();
            }
        }
    }

    public function index() {
        $this->User->recursive = 0;
        $this->set('users', $this->paginate());
    }
}

テストコード

<?php
App::uses('UsersController', 'Controller');

class UsersControllerTest extends ControllerTestCase {

    public function testAdd() {
        $this->Controller = $this->generate('Users');

        // The following line is my failed attempt at making $this->referer()
        // always return "/posts".

        $this->Controller->expects($this->any())->method('referer')->will($this->returnValue('/posts'));

        $this->testAction('/users/add/', array('method' => 'get'));
        $this->assertEquals('/users', $this->Controller->request->data['User']['redirect']);
    }
}

私は何を間違っていますか?

4

1 に答える 1