A similar problem to mine is in this thread, but it doesn’t use Zend_Session so is different from my issue.
I have successfully got PHPUnit working using Zend Framework’s ControllerTestCase class. I can log in a user and write successful tests for that log in, so that is fine:
$this->request->setMethod('POST')->setPost(array('username' => $user, 'password' => $password));
I cannot figure out how to log out the user though. Even if I specifically try by doing:
$namespace = new Zend_Session_Namespace("Default");
$namespace->username = false;
$namespace->passsword = false;
This should log out the user, even dispatching the test to the logout URL does not work.
I have checked my code to make sure that a use POSTing new credentials is logged in and any existing Session data is overwritten by the new log in credentials. This does not log in a new user either when running the test.
-
Has anyone attempted this and succeeded?
-
How can I log out the user so that a new POST log ins another user?
Thanks.
I’ll assume you’re using
Zend_Authfor the authentication and if I understood you correctly (I haven’t had my first coffee yet), you want to test that after a log out, a second user can log in.AFAIK, Z_A doesn’t use the default session namespace by default, but another one (I think it’s even
Zend_Auth). If you’re logging out a user, all you need to do is to call theclearIdentity()method on theZend_Authobject.I personally never tested logging in/out functionality, but you can write a test case that first logs in a user, assert that he’s logged in and/or that Zend_Auth has an identity, clear the identity, assert that Zend_Auth doesn’t have an identity, log in the second user, assert again.
HTH 🙂
Edit: Here’s a link to a test case for testing login stuff: http://zendframeworkstorefront.googlecode.com/svn/trunk/tests/application/controllers/customerControllerTest.php it’s from Keith Pope’s “Storefront” application.