Я пытаюсь проверить действие контроллера, которое позволяет редактировать профили пользователей. Среди прочего я хочу проверить, что каждый зарегистрированный пользователь может редактировать только свой профиль, а не другой. В случае нарушения этого ограничения действие должно быть перенаправлено на предварительно определенную домашнюю страницу.
В этом сценарии у меня есть прибор, который создает пользователя с ID = 1. Поэтому я думал о тестировании ограничения следующим образом:
$data = $this->Users->User->read(null, 1);
$this->Users->Auth->login($data);
$this->testAction('/users/edit/2', array('method' => 'get'));
$url = parse_url($this->headers['Location']);
$this->assertEquals($url['path'], '/homepage');
Тест проходит это утверждение. Поэтому следующий шаг - проверить, показывает ли выполнение '/users/edit/1'
с идентификатором зарегистрированного пользователя форму:
$this->testAction('/users/edit/1', array('method' => 'get', 'return' => 'vars'));
$matcher = array(
'tag' => 'form',
'ancestor' => array('tag' => 'div'),
'descendant' => array('tag' => 'fieldset'),
);
$this->assertTag($matcher, $this->vars['content_for_layout'], 'The edition form was not found');
Однако это утверждение не удается. После поиска с debug()
я обнаружил, что $this->Auth->user()
возвращает всю информацию, но $this->Auth->user('id')
возвращает null
. Поскольку я использую последнее в сравнении внутри действия, оно оценивается как ложное и вызывает
тест не пройден.
Любопытно, что это происходит при тестировании, но не при выполнении действия в браузере. Итак, как правильно протестировать это действие?
Спасибо!