josheli

Automated Testing with Codeception

I gave a little presentation at work the other day on using automated testing in my Laravel project using Codeception. Here's a screencast. The audio is a little low, so there's a basic transcript below the video. Enjoy.

========================================== Transcript...

[chrome: show feature request in jira] so here's a little example of writing an automated test to confirm a new feature.

[switch to jira] there's a request in my issue tracker to sort any "Other" option in dropdowns to the bottom of the dropdown list.

[chrome: show "before" example in metrics] see here how "other" gets lost in the list. we want it at the bottom. so let's switch over to do that.

[phpstorm: implement feature] ok, i can add the feature with a few lines of code. since this is a demo i already have the solution i can just copy/paste in... save it. now back over to chrome

[chrome: show "after" example] ...and in the form and there's "other" listed at the bottom. that's great, perfect.

but we don't want to have to manually test that this feature works every time i make any new change to the code. i'd probably forget to test this little bit of functionality if i had to do it manually. so it would be great if i could just push a button and run automatic tests whenever i change any code in the application. that way we can make sure we don't break existing features like this nifty one we just implemented.

[phpstorm: add empty test and run showing failure] so let's do that. let's create a test for this feature.

[type ...] and let's fail the test for now, to remind us that we need to implement it. as a quick aside, i'm using a package called "codeception" for my test suite.

[switch to codeception website] codeception is an automated test framework written in PHP. it has different modules for various things like database testing, rest api testing, testing frameworks like laravel or symfony, and other stuff. of course there's plenty of other test frameworks you could use, like PHPUnit, Selenium, Drupal's built-in SimpleTest ... but i like codeception for what i'm doing.

[phpstorm: run test] anyway, let's run our failing test ... and of course it fails. so we need to make it not fail.

[phpstorm: test code] luckily, i already have some test code here i'll just paste in. this is pretty self-explanatory i think. we tell it to log in, go to the particular page with the form on it, grab the dropdown options, and assert that "other" is at the bottom.

[phpstorm: run test ] so now let's run the test ... and hey success! the test passes. now anytime in the future whenever i change code, i can run this automated test and get immediate assurance that i didn't break anything, at least not this feature.

for metrics, the api and supporting code, i've written almost 50 tests with 500 assertions. that's basically 500 manual tests i don't have to run each time. and so when i work on the code, i can press a button and run these suite of tests, and feel much more confident that i haven't broken anything.

so that's a little intro to automated testing. hope it's helpful. thanks.