Mariano,

I have tried writing some tests. This looks great. Thanks.

I am running into an issue when my controller actions is doing
redirects. For e.g. in my login action, the user is redirected to
another page if login is successful. However the cake redirect
function has an exit in it ( which is useful for the web application)
but the test framework exits when that happens.

What is the best way to handle this? In TestSuite, I think the
dispatch maybe handled differently since I was able to test the same
action with a post.

Thanks
Krishnan

On Apr 25, 2:04 am, ks <[EMAIL PROTECTED]> wrote:
> Great! Thanks Mariano.
>
> I downloaded the code yesterday and see the testAction method which i
> did not have in the previous version. Thanks for your help, I will
> give this a try
>
> Krishnan
>
> On Apr 23, 3:28 pm, "Mariano Iglesias" <[EMAIL PROTECTED]>
> wrote:
>
>
>
> > I haven't had time to write a Bakery article regarding this, but update to
> > latest SVN head and look for testAction() in CakeTestSuite. I still have to
> > add a couple of things but I'll try to give you an idea here:
>
> > Say you have typical Articles controller, with articles model, and it looks
> > like this:
>
> > <?php
>
> > class ArticlesController extends AppController {
> >         var $name = 'Articles';
> >         var $helpers = array('Ajax', 'Form', 'Html');
>
> >         function index($short = null) {
> >                 if (!empty($this->data)) {
> >                         $this->Article->save($this->data);
> >                 }
>
> >                 if (!empty($short)) {
> >                         $result = $this->Article->findAll(null, array('id',
> > 'title'));
> >                 } else {
> >                         $result = $this->Article->findAll();
> >                 }
>
> >                 if (isset($this->params['requested'])) {
> >                         return $result;
> >                 }
>
> >                 $this->set('title', 'Articles');
> >                 $this->set('articles', $result);
> >         }
>
> > }
>
> > ?>
>
> > Create then a file named articles_controller.test.php on your
> > app/tests/cases/controllers directory and inside put:
>
> > <?php
>
> > class ArticlesControllerTest extends CakeTestCase {
> >         function startCase() {
> >                 echo '<h1>StartingTestCase</h1>';
> >         }
>
> >         function endCase() {
> >                 echo '<h1>EndingTestCase</h1>';
> >         }
>
> >         function startTest($method) {
> >                 echo '<h3>Starting method ' . $method . '</h3>';
> >         }
>
> >         function endTest($method) {
> >                 echo '<hr />';
> >         }
>
> >         function testIndex() {
> >                 $result = $this->testAction('/articles/index');
> >                 debug($result);
> >         }
>
> >         function testIndexShort() {
> >                 $result = $this->testAction('/articles/index/short');
> >                 debug($result);
> >         }
>
> >         function testIndexShortGetRenderedHtml() {
> >                 $result = $this->testAction('/articles/index/short',
> > array('return' => 'render'));
> >                 debug(htmlentities($result));
> >         }
>
> >         function testIndexShortGetViewVars() {
> >                 $result = $this->testAction('/articles/index/short',
> > array('return' => 'vars'));
> >                 debug($result);
> >         }
>
> >         function testIndexFixturized() {
> >                 $result = $this->testAction('/articles/index/short',
> > array('fixturize' => true));
> >                 debug($result);
> >         }
>
> >         function testIndexPostFixturized() {
> >                 $data = array('Article' => array('user_id' => 1, 'published'
> > => 1, 'slug'=>'new-article', 'title' => 'New Article', 'body' => 'New
> > Body'));
> >                 $result = $this->testAction('/articles/index',
> > array('fixturize' => true, 'data' => $data, 'method' => 'post'));
> >                 debug($result);
> >         }
>
> > }
>
> > ?>
>
> > Ok couple of things:
>
> > * In second parameter of testAction() you send an array with attributes.
> > Among others use:
>
> >         - return: set to what you want returned. Valid values are: 'vars'
> > (so you get the view vars available after executing action), 'render' (so
> > you get html generated once action is run), or 'return' to get the returned
> > value when action uses $this->params['requested']. Default is 'return'.
>
> >         - fixturize: set to true if you want your models auto-fixturized (so
> > your application tables get copied, along with their records, totesttables
> > so if you change data it does not affect your real application.) If you set
> > 'fixturize' to an array of models, then only those models will be
> > auto-fixturized while the other will remain with live tables.
>
> >         - data: see last item
>
> >         - method: see last item
>
> > * testAction()can auto-fixturize the model so if yourtestsubmits data (and
> > therefore saves records, see next item) you can safely do it ontesttables,
> > automatically created for you.
>
> > * You can POST data as POST or GET using the 'data' setting, where you set
> > it to be an associative array consisting of fields => value. Take a look at
> > function testIndexPostFixturized() in abovetestcase to see how we emulate
> > posting form data for a new article submission.
>
> > -MI
>
> > ---------------------------------------------------------------------------
>
> > Remember, smart coders answer ten questions for every question they ask.
> > So be smart, be cool, and share your knowledge.
>
> > BAKE ON!
>
> > blog:http://www.MarianoIglesias.com.ar
>
> > -----Mensaje original-----
> > De: cake-php@googlegroups.com [mailto:[EMAIL PROTECTED] En nombre
> > de ks
> > Enviado el: Lunes, 23 de Abril de 2007 05:44 p.m.
> > Para: Cake PHP
> > Asunto: Re: whats the relationship between CakePHP 1.2testsuiteN
> > SimpleTest
>
> > Do you know when that will be available in ? We currently need to
> > write unit tests for our controllers and I am debating if we should
> > wait until this is released or use testsuite in the meantime and move
> > to CakeTest once thats available?- Hide quoted text -
>
> - Show quoted text -


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to