2013-03-21 3 views
4

Я выяснил, как издеваться над компонентом Auth при тестировании моих контроллеров, но я пытаюсь издеваться над компонентом Auth при тестировании моих компонентов. Я использую cakephp2.0 и phpUnit.Отказывание AuthComponent в тестировании компонентного блока с помощью Cakephp

Когда я использую :: generate() Я получаю сообщение об ошибке: вызов неопределенного метода TestCalendarController :: generate.

Есть ли способ издеваться над функцией пользователя() функции Auth Component? Или мне нужно переписать компонент, чтобы избежать его использования?

Спасибо!

CalendarComponentTest

App::uses('Controller', 'Controller'); 
App::uses('CakeRequest', 'Network'); 
App::uses('CakeResponse', 'Network'); 
App::uses('ComponentCollection', 'Controller'); 
App::uses('CalendarComponent', 'Controller/Component'); 
App::uses('AuthComponent', 'Controller/Component'); 

class TestCalendarController extends Controller { 

} 

class CalendarComponentTest extends CakeTestCase { 
    public $CalendarComponent = null; 
    public $Controller = null; 

public function setUp() { 
     parent::setUp(); 
     // Setup our component and fake test controller 
     $Collection = new ComponentCollection(); 
     $this->CalendarComponent = new CalendarComponent($Collection); 
     $CakeRequest = new CakeRequest(); 
     $CakeResponse = new CakeResponse(); 
     $this->Controller = new TestCalendarController($CakeRequest, $CakeResponse); 
     $this->CalendarComponent->startup($this->Controller); 
} 

//Here I am trying to mock the Auth component. I've tried a number of different things, and I'm not getting anything to work. 
public function testAdjust() { 
    $TestCalendar = $this->Controller->generate('TestCalendar', array(
     'components' => array(
      'Auth' => array('user') 
     ) 
    )); 
    $TestCalendar->Auth->staticExpects($this->any()) 
     ->method('user') 
     ->will($this->returnValue(array('id'=>1, 'timezone'=>'America/Los_Angeles', 'type'=>'student'))); 

    // Test our adjust method with different parameter settings 
    $this->CalendarComponent->calculate_parameters(); 



} 

public function tearDown() { 
     parent::tearDown(); 
     // Clean up after we're done 
     unset($this->CalendarComponent); 
     unset($this->Controller); 
    } 


} 

ответ

1

У меня есть один и тот же вопрос и нашел возможное решение, по крайней мере, это работает для меня.

Чтобы получить некоторые подсказки, я указал мое внимание тестов для самого CakePHP и, в частности, один для AuthComponent https://github.com/cakephp/cakephp/blob/master/lib/Cake/Test/Case/Controller/Component/AuthComponentTest.php

Это, кажется, содержит насмешливый других компонентов, например:

$this->Auth->Session = $this->getMock('SessionComponent', array('renew'), array(), '', false); 

В вашем случае вы должны использовать что-то вроде:

$this->CalendarComponent->Auth = $this->getMock('Auth', array('user')); 
$this->CalendarComponent->Auth->expects($this->any())->method('user')->with('id')->will($this->returnValue($user_id));