コントローラーをテストするときに認証コンポーネントをモックする方法を見つけましたが、コンポーネントをテストするときに認証コンポーネントをモックするのに苦労しています。Cakephp2.0 と phpUnit を使用しています。
::generate() を使用すると、Error: Call to undefined method TestCalendarController::generate が発生します。
認証コンポーネントの user() 関数をモックする方法はありますか? または、使用しないようにコンポーネントを書き直す必要がありますか?
ありがとう!
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);
}
}