As a follow up of my blog from yesterday which contained information howto get codeception and Laravel playing nicely together I tought it would be nice to make a small AcceptanceTest of a Login page to see how this actually works.

Lets start with generating the test, fire up your console and type:

./vendor/bin/codecept generate:cept acceptance App/Http/Controllers/Auth/AuthController

Open up your favorite IDE or just vi in your console. Navigate to your project root /acceptance/App/Http/Controllers/Auth/AuthControllerCept.php

You will see that there are some lines of code in here already, I altered the wantTo, check it:

<?php 

$I = new AcceptanceTester($scenario);

$I->wantTo('See if the login page contains the necessary fields');

Now what I want to do is to visit the login page of my application to check if it

    1. Exists
    2. Actually has an email field
    3. Actually has an password field
    4. Actually has an submit button
    5. Has a title
    6. In the code somewhere a  crsf field is located

So first of all, we need to check if we can reach the login page. As Laravel has a beautiful function that generates the whole Auth stuff for you, normally our page will be located at route http://url.ext/login (If you don’t have this stuff yet, in your console execute “`php artisan generate:auth“`)

Lets check if we can navigate there:

$I->amOnPage('/login');

Next, lets check if the page has an input named email and an input of type password, you can check on kinds of attributes with this seeElement function:

$I->seeElement('input', ['name' => 'email']);
$I->seeElement('input', ['type' => 'password']);

Well, since we are checking elements out, we ofcourse always need an submit button;

$I->seeElement('button', ['type' => 'submit']);

What more could we check? Well, for instance if there is an Password forgotten link..

$I->seeLink('Forgot your password?'); // matches <a href="#">Forgot your password?</a>

And the title, that would be cool to test right?

$I->seeInTitle('Laravel');

Last but not least, is our csrf token somewhere?

$I->seeInSource("<input type=\"hidden\" name=\"_token\" value=");

 

Well, lets try to run this test now! In your console:

./vendor/bin/codecept run

And BOOM errors!

Schermafbeelding+2016-06-08+om+16.10.21

Why? Well… cause we forgot to configure one thing.. Open up your acceptance.suite.yml within the tests folder and change the line

url: http://localhost/myapp

to your own url!

Lets try to run it again.

./vendor/bin/codecept run

And again, an other error.

Schermafbeelding+2016-06-08+om+16.08.34

This is a fairly easy one, CodeCeption is quite strict when it comes to Capitals, change

$I->seeLink('Forgot your password?');

// To:
$I->seeLink('Forgot Your Password?');

Run it for the last time, and here we are, it works.

Thats it for this post, I will continue on using wrong credentials and actually logging in in the near future ;-)

Questions? -> Comment!