J'ai simpletest mis en place avec CodeIgniter (https://github.com/ericbarnes/codeigniter-simpletest)php (CodeIgniter) - tests unitaires simpletest w/données de session
J'ai quelques tests simples en cours d'exécution et les choses semblent bonnes. Mais je frappe un bloc. Je ne sais pas comment tester en utilisant des données de session. En fait, les tests fonctionnent très bien. Mais je reçois des exceptions. Si je lance mes tests séparément (c'est-à-dire, tout sauf l'onglet "tous" en mode simpletest), il n'y a pas de problème. Et quand je lance des tests "tous", j'obtiens cette erreur:
Erreur PHP inattendue [Impossible de modifier les informations d'en-tête - les en-têtes déjà envoyés par (sortie commencée à */www/public/tests/simpletest/extensions/my_reporter .php: 193)] gravité [E_WARNING] dans [* /www/system/libraries/Session.php ligne 408] Blockquote
Maintenant, je devine que tout cela utilise mon navigateur pour définir des sessions et que vous pouvez Ne pas les initialiser après le premier cas de test (dans mon cas, il y a un cas de test de modèle utilisateur qui se termine, puis le deuxième cas de test (bibliothèque d'authentification), qui a l'exception
Je devine qu'après le premier test, les en-têtes ont déjà été envoyés.
<?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 */
Les deux lignes qui affectent ce sont les session->sess_destroy()
et session->unset_userdata()
Ces lignes dans les deux tearDown() ou setUp() provoquera la même question. Chacun provoque une exception d'en-tête. Je pense que j'espère que je peux retirer le navigateur des tests et que le plus simple peut simuler cela.
Que puis-je faire pour résoudre ce problème?
un peu de code pour commencer. J'imagine que si vous produisez du contenu dans votre contrôleur, ce sera la cause. Vérifiez également l'espace vide après toute fermeture? mais contrôleur de poste s'il vous plaît – Ross
Il n'y a pas de contrôleur dans mon code. J'ai posté la classe de test si, cela aide. – Matthew