php (codeigniter) - простейшее модульное тестирование с данными сеанса
Так что у меня самая простая настройка с codeigniter ( https://github.com/ericbarnes/codeigniter-simpletest)
У меня есть несколько простых тестов, и все выглядит хорошо. Но я бью блок. Я не знаю, как проверить, используя данные сеанса.
Дело в том, что тесты работают просто отлично. Но я получаю некоторые исключения. Если я запускаю свои тесты отдельно (т. Е. Что-либо, кроме вкладки "все" в простейшем), то проблем не возникает. И когда я запускаю "все" тесты, я получаю эту ошибку:
Неожиданная ошибка PHP [Невозможно изменить информацию заголовка - заголовки уже отправлены (выходные данные начинаются с */www/public/tests/simpletest/extensions/my_reporter.php:193)] серьезность [E_WARNING] в [*/ www / system / library /Session.php line 408] Цитата
Теперь я предполагаю, что все это использует мой браузер для установки сессий и что вы не можете устанавливать / отменять их после завершения первого теста (в моем случае, есть тестовый пример модели пользователя, который завершается, а затем второй тест case (библиотека аутентификации), в которой есть исключение.
Я предполагаю, что после того, как первый тестовый пример сделан, заголовки уже отправлены.
<?php
class test_auth extends CodeIgniterUnitTestCase
{
public function __construct()
{
parent::__construct();
$this->UnitTestCase('Authorization Library');
$this->rand_good = rand(500,15000);
$this->rand_bad = rand(500,15000);
}
public function setUp()
{
$this->_ci->db->flush_cache();
$this->_ci->db->truncate('users');
$this->_ci->session->sess_destroy();
$this->_ci->session->unset_userdata('logged_in_id');
$u = new User();
$u->email = 'email' . $this->rand_good;
$u->password = 'pass' . $this->rand_good;
$u->confirm_password = 'pass' . $this->rand_good;
$u->save();
}
public function tearDown()
{
$u = new User();
$u->get();
foreach($u->all as $user)
{
$user->delete();
}
}
public function test_login_good_email_good_password()
{
$u = new User();
$u->email = 'email' . $this->rand_good;
$u->password = 'pass' . $this->rand_good;
$this->assertTrue($this->_ci->auth->login($u), 'login');
$this->assertTrue($this->_ci->auth->is_logged_in(), 'is logged in');
}
public function test_login_bad_email_bad_password()
{
$u = new User();
$u->email = 'email' . $this->rand_bad;
$u->password = 'pass' . $this->rand_bad;
$this->assertFalse($this->_ci->auth->login($u), 'login');
$this->assertFalse($this->_ci->auth->is_logged_in(), 'is logged in');
}
}
/* End of file test_auth.php */
На это влияют две строки: session->sess_destroy()
а также session->unset_userdata()
Эти строки в tearDown() или setUp() вызовут ту же проблему. Каждый вызывает исключение заголовка.
Полагаю, я надеюсь, что смогу принять участие браузера в тестировании, и это самое простое может имитировать это как-то.
Что я могу сделать, чтобы решить это?
1 ответ
sess_destroy()
Метод устанавливает новый файл cookie, который изменяет информацию заголовка. Так что вы должны просто использовать unset_userdata()
и очистите поля, которые, как вы знаете, необходимо очистить, чтобы тест завершился правильно. Тогда избегай звонить sess_destroy()
в ваших тестах.
Увидеть setcookie()
позвоните сюда: http://bitbucket.org/ellislab/codeigniter/src/c39315f13a76/system/libraries/Session.php