1

私はケーキのリクエストをモックする方法をインターネットで探していました。データ関数をスタブ化して、コントローラーで$ this-> request-> data('whatever')を使用できるようにします。しかし、私のテストケースで問題が発生しています

$Jobs = $this->generate('Tasks' , array(
  'components' => array(        
    'RequestHandler' => array('isMobile','prefers','renderAs'))
));
// Mock CakeRequest
$request = $this->getMock('CakeRequest', array('_readInput'));      
$Jobs->RequestHandler->request = $request;

$Jobs->RequestHandler->request->expects($this->any())
  ->method('data')->with('anything')->will($this->returnValue('test'));

$result = $this->testAction('/tasks/test/',
            array('method' => 'get', 'return' => 'vars'));

コントローラを呼び出す$this->request->data('anything')と、nullが返されます。

これで私を助けてみてください

4

1 に答える 1

0

PhpUnitのドキュメントから:

デフォルトでは、指定されたクラスのすべてのメソッドは、たとえば、戻り値が will($this->returnValue()) を使用して構成されていない限り、NULL を返すだけのテスト double に置き換えられます。

2 番目の (オプションの) パラメーターが指定されると、名前が配列内にあるメソッドのみが構成可能なテスト double に置き換えられます。他のメソッドの動作は変更されません。

したがって、次のいずれかを行う必要があります。

$Jobs = $this->generate('Tasks' , array(
    'components' => array(        
    'RequestHandler' => array('isMobile','prefers','renderAs'))
));
// Mock CakeRequest
$request = $this->getMock('CakeRequest', array('_readInput'));      
$Jobs->RequestHandler->request = $request;

$Jobs->RequestHandler->request->expects($this->any())
    ->method('_readInput')->with('anything')->will($this->returnValue('test'));

$result = $this->testAction('/tasks/test/',
        array('method' => 'get', 'return' => 'vars'));

またはこれ:

$Jobs = $this->generate('Tasks' , array(
    'components' => array(        
    'RequestHandler' => array('isMobile','prefers','renderAs'))
));
// Mock CakeRequest
$request = $this->getMock('CakeRequest', array('data'));      
$Jobs->RequestHandler->request = $request;

$Jobs->RequestHandler->request->expects($this->any())
    ->method('data')->with('anything')->will($this->returnValue('test'));

$result = $this->testAction('/tasks/test/',
        array('method' => 'get', 'return' => 'vars'));

私は CakePHP を知らないので、どれが正しい答えかはわかりません。しかし、これによると:http: //api20.cakephp.org/view_source/controller-test-dispatcher (232行目)、前者を試す必要があります。

于 2013-02-14T14:08:06.250 に答える