Hi again

The missing interest in this question tells me something...

I finally managed the problem to disappear by not (probably stupidly)
logging in by dispatching the login controller. In test cases I use the
login mechanism "directly" by using the authentication service. Now its
possible dispatch a controller multiple times successfully.

Sorry for the disturbance and thanks for your effort making the
framework better.

Sincerely
Dave

Am 30.05.2014 11:49, schrieb David Daniel:
> Hi there
> 
> I have a problem with controller test cases and I think this is a
> general problem. It may be that I am totally wrong, however it would be
> great if someone could help me sort this out.
> 
> When dispatching multiple times within a controller test case, the
> assertion about the redirection might lead to a wrong result.
> 
> In my case I have to login before I can dispatch the tested controller,
> the tested action  is only accessible by an authenticated and authorized
> user.
> 
> In order to be able to send a form that validates, I dispatch the action
> by a _GET_ request, get the _csrf_ token and dispatch the action again
> with a _POST_ request - all after logging in first.
> 
> Login works and the _GET_ request of the tested action works as well, I
> am able to read the csrf token from the response. I am positive that the
> post request works as well (I can verify the creation of a new item in
> the testing database).
> 
> The last issued request (post request) finally redirects to a specific
> location. This works when doing this with the browser. If done in a
> controller test case, the assertion about the location header fails with
> the reason that the effective redirection is taking place to "/" instead
> to the specific route.
> 
> The header with the correct location is present, that can be verified by
> investiating the actual response. In fact the method
> =toString()= of the headers gives a different result than accessing the
> location header directly:
> 
> $headers = $this->getApplication ()->getResponse ()->getHeaders ();
> ...
> var_dump ($headers->toString ());
> // leads to:
> string(41) "Location: /pres/pharmacy/edit/1
> "
> ...
> var_dump ($headers->get ('location'));
> // leads to:
> class Zend\Http\Header\Location#3642 (1) {
>   protected $uri =>
>   class Zend\Uri\Uri#3869 (8) {
>     protected $scheme =>
>     NULL
>     protected $userInfo =>
>     NULL
>     protected $host =>
>     NULL
>     protected $port =>
>     NULL
>     protected $path =>
>     string(1) "/"
>     protected $query =>
>     NULL
>     protected $fragment =>
>     NULL
>     protected $validHostTypes =>
>     int(31)
>   }
> }
> 
> Now the test fails:
> 
> Failed asserting response redirects to "/pres/pharmacy/edit/1", actual
> redirection is "/"
> 
> I am not sure if multiple dispatching within controller tests is
> something that is not supposed to work. If this was the case, I would
> need to refactor about the entire application, complicating things
> heavily - I would need to modify the entire authentication stack, modify
> the creation of all forms and so on - everything in order to be able to
> test the application. I hope there is another answer to this...
> 
> Big thanks in advance!
> Greets
> dave
> 
> 

-- 
List: fw-general@lists.zend.com
Info: http://framework.zend.com/archives
Unsubscribe: fw-general-unsubscr...@lists.zend.com


Reply via email to