Bonjour,
Voila je rencontre un petit problème avec mon code.
Je suis sur le cours
[https://www.grafikart.fr/tutoriels/test-auth-php-phpunit-1184]
Le fichier est AuthTest.php
<?php
use PDO;
use App\Auth;
use PHPUnit\Framework\TestCase;
use App\Exception\ForbiddenException;
class AuthTest extends TestCase{
/**
* @var Auth
*/
private $auth;
/**
* @before
*/
private $session = [];
// pour éviter de copier à chaque fois le même code de PDO avec connexion et creation on créé une méthode setAuth
public function setAuth (){
//sqlite::memory = db virtuelle pas besoin de tester sur la vraie DB
$pdo = new PDO("sqlite::memory:", null, null, [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);// on a une nouvelle instance de PDO donc on va créer une table avec des utilisateurs
$pdo->query('CREATE TABLE users (id INTEGER, username TEXT, password TEXT, role TEXT)');
for ($i = 1; $i < 10; $i++){
// avant d'insérer un password il faut le hacher
$password = password_hash("user$i", PASSWORD_BCRYPT);
// on rempli la base
$pdo->query("INSERT INTO users (id, username, password, role) VALUES ($i, 'user$i', '$password', 'user$i')");
}
$this->auth = new Auth($pdo, "/login", $this->session); // on donne les éléments de connexion pour les tests
}
public function testLoginWithBadUsername (){
// on essaye de se connecter en donnant un mauvais mot de passe, on devrait avoir un true à l'assertNull
$this->assertNull($this->auth->login('aze', 'aze'));
}
public function testLoginWithBadPassword (){
// on essaye de se connecter en donnant un mauvais mot de passe, on devrait avoir un true à l'assertNull
$this->assertNull($this->auth->login('user1', 'aze'));
}
public function testLoginSuccess (){
// on essaye de se connecter en donnant un mauvais mot de passe, on devrait avoir un true à l'assertNull
$this->assertObjectHasAttribute("username", $this->auth->login('user1', 'user1'));
$this->assertEquals(1, $this->session['auth']);
}
public function testUserWhenNotConnected () {
$this->assertNull($this->auth->user());
}
public function testUserWhenConnectedWithUnexitingUser () {
$this->session['auth'] = 11;
$this->assertNull($this->auth->user());
}
public function testUserWhenConnected () {
$this->session['auth'] = 4;
$user = $this->auth->user();
$this->assertIsObject($user);
$this->assertEquals("user4", $user->username);
}
public function testRequireRole ()
{
$this->session['auth'] = 2;
$this->auth->requireRole('user2');
$this->expectNotToPerformAssertions();
}
public function testRequireRoleWithoutLoginThrowException ()
{
$this->expectException(ForbiddenException::class);
$this->auth->requireRole('user3');
}
public function testRequireRoleThrowException ()
{
$this->expectException(ForbiddenException::class);
$this->session['auth'] = 2;
$this->auth->requireRole('user3');
}
}
?>
Error: Call to a member function login() on null
Ou
Error: Call to a member function user() on null
quelqu'un aurait une idée ou a eu le même problème?
Merci
Bonjour,
Humm... excuse moi mais je suis quand même un peu sceptique sur le fait que l'objet "auth" soit bien initialisé...
est-ce que tu la vérifié via un var_dump ? est-ce que tu est sur que setAuth est bien appelée au moins une fois ?
est-ce qu'il n'y a pas une erreur au niveau de l'instanciation ?