SlideShare a Scribd company logo
WELCOME!
Testing in Craft CMS
Charlotte Craft CMS Meetup
Nov 13, 2019
Justin Holt - Presenter
Thank You
Providing
Meeting
Hosting
Sponsoring
Food &
Beverages
Testing in Craft CMS
Agenda
1. How can tests help? 

Are they worth the effort?
2. Types of tests.
3. Craft and Codeception
4. How to run Codeception tests in
Craft.
5. Tips for successful testing.
6. Testing modules and plugins.
7. Mock data with Fixtures.
8. Offloading tests to Queue.
9. Other kinds of tests.
10. Wrap up.
How can tests help? 

Edge Cases
New Developers
You* 

(one year later on same project)
Are they worth the effort?
Scale your level of effort
- One and done? (prob not)
- Maintenance & kicking can down the
road? (might be worth it)
- Crucial workflow, several developers?
(most def)
- Bleeding edge? (Yes but only stable)
Types of Tests
Manual tests (you already run these)

Refresh page, submit form, click stuff. 

Log what happens.
Somewhat measurable.
Somewhat repeatable.
Types of Tests
Unit tests
Test specific results from a single “action”.
Test results of a function, possibly classes.
Measurable, repeatable.
In Craft, unit tests will primarily cover Services.
Test high in the call trace.
Save Controller method testing for functional.
Types of Tests
Functional / Acceptance tests
Test complete package from USER perspective.
Primarily will test your Craft Controller methods.
Typical Controller functional flow:
1) Process a request.
2) Invoke Craft services (Unit test)
3) Return a response
Testing is all about strategy and
approaches. Manual testing and automated
testing work best together. You can use
your judgement to detect/prevent issues
that computers cannot see whilst computers
can execute many tests in short time.
Tip:
Pixel & Tonic
Craft & Codeception
+
Codeception in Craft
Fully featured PHP testing suite.
Requires Craft v3.2
Possible prior, requires bootstrapping
Yii Codeception module yourself.
How to run Codeception
tests in Craft
1. Installing Codeception.
2. Setting up required directories.
3. Setting up required files.
4. Setting up required config.
5. Codeception requirements.
6. Adding a test.
7. Running a test.
Installing Codeception
Install via composer in project root:
Installing Codeception
Test that Codeception installed correctly.
Setting up required
directories.
In your /tests dir create /_craft
In your /_craft create: 

/storage
/templates
/migrations
/config
/translations
You can also copy/paste from your existing dirs
Into /tests/_craft for testing sites.
Command line:
Setting up required
directories.
Bootstrap file
structure
Setting up required directories.
Setting up required
files.
Open /codeception.yaml
Replace with:
Setting up required
files.
Create /tests/.env
Populate variables:
Setting up required
files.
Create /tests/_bootstrap.php
Add:
Setting up required
files.
Create /tests/_craft/config/test.php
Add:
Setting up required
files.
Check /tests/acceptance.suite.yml
/tests/functional.suite.yml
/tests/unit.suite.yml
Ensure Codeception module is added:
Setting up required
config.
Add /tests/_craft/configdb.php
Codeception
Requirements.
Add /tests/unit/_bootstrap.php
/tests/functional/_bootstrap.php
/tests/acceptance/_bootstrap.php
Codeception will only run these when told.
You can run test-type specific business logic.
Adding a Test.
Add /tests/unit/ExampleTest.php
Codeception will use
UnitTester and Craft
classes to check the
Craft Edition for
“Pro” using 

$this->assertSame(…).
Running a Test.
Running a Test.
Running a Real World Test.
Add /tests/acceptance/SeasonActiveHomeCest.php
Codeception will use
AcceptanceTester and
Craft classes to
check the presence
of a schedule
carousel based on
element/classname.
Running a Real World Test.
Running a Real World Test.
Tips for Successful
Testing
Maintain your Database using
cleanup and transaction.
Cleanup ensures removal of any
Fixture data in your DB during your test.
Transaction ensures any DB changes are
rolled back using a Yii2 transaction.
Tips for Successful
Testing
Use .gitignore for /storage
And also new /tests/_output/.
Stick to the namespaces conventions
unit, functional, acceptance.
Testing Modules &
Plugins
Modules: once registered as normal
the module will be loaded and available
via MyModule::getInstance() to your test suites.
Plugins: Register in codeception.yml
then the plugin will be loaded and available
via MyPlugin::getInstance() to your test suites.
Testing Modules &
Plugins
Plugins: Register in codeception.yml
Mock Data with Fixtures
Fixtures: used to setup data in a test suite
That is predictable and the
same for each test run.
Craft gives us extras for Fixtures of Craft data:
Element, Asset, Category, Entry, Global set, Tag,
User and Element fixtures.
Extend crafttestfixtureselements…Fixture
Offloading Tests to Queue
1. Ensure your test class has a $tester property.
2. Call the following method:
First argument is the class of your job.
Second argument is any arguments
to pass to your job.
Other Kinds of Tests
-Testing emails with Mailtrap
-Visual Regression testing
tools and services
-Form Testing
-Testing at Twig level
-Performance, A11y tests (in
browser)
Testing Emails with
Mailtrap
Signup for account on website.
Copy credentials from SMTP settings.
Add to .env:
Testing Emails with
Mailtrap
Edit /config/app.php:
Testing Emails with
Mailtrap
Now all emails going out from Craft
including System messages and any
custom methods, will land at Mailtrap
in your account for testing and debugging.
*Free account = 500/month limit
Visual Regression testing
tools and services
Form Testing
-Validation.
-Honeypots 

(kind of).
-Recaptchas.
-Trap submission
notifications with
Mailtrap.
We already do most
of this!
Form Testing
Testing at Twig Level
Testing at Twig Level
Performance/A11y Testing
-Lighthouse (in Chrome devtools)
-Google Pagespeed
-webpagetest.org
-GTMetrix.com
-aXe tool (commandline)
-pA11y tool (commandline)
-KoA11y tool (gui)
-Google Accessibility Developer Tools
-Tenon.io
Thank You!
Thank You
Providing
Meeting
Hosting
Sponsoring
Food &
Beverages
Thank You!

More Related Content

Similar to Testing in Craft CMS

Assessing Unit Test Quality
Assessing Unit Test QualityAssessing Unit Test Quality
Assessing Unit Test Quality
guest268ee8
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
Tricode (part of Dept)
 

Similar to Testing in Craft CMS (20)

Nguyenvandungb seminar
Nguyenvandungb seminarNguyenvandungb seminar
Nguyenvandungb seminar
 
Code igniter unittest-part1
Code igniter unittest-part1Code igniter unittest-part1
Code igniter unittest-part1
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
 
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex ScenariosUnit Testing in Flutter - From Workflow Essentials to Complex Scenarios
Unit Testing in Flutter - From Workflow Essentials to Complex Scenarios
 
Stopping the Rot - Putting Legacy C++ Under Test
Stopping the Rot - Putting Legacy C++ Under TestStopping the Rot - Putting Legacy C++ Under Test
Stopping the Rot - Putting Legacy C++ Under Test
 
Review of an open source unit test tool- Cucumber_Presentation
Review of an open source unit test tool- Cucumber_PresentationReview of an open source unit test tool- Cucumber_Presentation
Review of an open source unit test tool- Cucumber_Presentation
 
Justmeans power point
Justmeans power pointJustmeans power point
Justmeans power point
 
Assessing Unit Test Quality
Assessing Unit Test QualityAssessing Unit Test Quality
Assessing Unit Test Quality
 
Testing Options in Java
Testing Options in JavaTesting Options in Java
Testing Options in Java
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to use
 
Test Complete
Test CompleteTest Complete
Test Complete
 
Useful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvmUseful practices of creation automatic tests by using cucumber jvm
Useful practices of creation automatic tests by using cucumber jvm
 
[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test[xp2013] Narrow Down What to Test
[xp2013] Narrow Down What to Test
 
Python and test
Python and testPython and test
Python and test
 
Presentation
PresentationPresentation
Presentation
 
Behavior Driven Development by Example
Behavior Driven Development by ExampleBehavior Driven Development by Example
Behavior Driven Development by Example
 
Simple tools to fight bigger quality battle
Simple tools to fight bigger quality battleSimple tools to fight bigger quality battle
Simple tools to fight bigger quality battle
 
Tdd is not about testing (OOP)
Tdd is not about testing (OOP)Tdd is not about testing (OOP)
Tdd is not about testing (OOP)
 
Codeception introduction and use in Yii
Codeception introduction and use in YiiCodeception introduction and use in Yii
Codeception introduction and use in Yii
 
Unit testing php-unit - phing - selenium_v2
Unit testing   php-unit - phing - selenium_v2Unit testing   php-unit - phing - selenium_v2
Unit testing php-unit - phing - selenium_v2
 

Recently uploaded

Article writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptxArticle writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptx
abhinandnam9997
 
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
aagad
 

Recently uploaded (12)

1.Wireless Communication System_Wireless communication is a broad term that i...
1.Wireless Communication System_Wireless communication is a broad term that i...1.Wireless Communication System_Wireless communication is a broad term that i...
1.Wireless Communication System_Wireless communication is a broad term that i...
 
The+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptxThe+Prospects+of+E-Commerce+in+China.pptx
The+Prospects+of+E-Commerce+in+China.pptx
 
Article writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptxArticle writing on excessive use of internet.pptx
Article writing on excessive use of internet.pptx
 
Multi-cluster Kubernetes Networking- Patterns, Projects and Guidelines
Multi-cluster Kubernetes Networking- Patterns, Projects and GuidelinesMulti-cluster Kubernetes Networking- Patterns, Projects and Guidelines
Multi-cluster Kubernetes Networking- Patterns, Projects and Guidelines
 
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
一比一原版UTS毕业证悉尼科技大学毕业证成绩单如何办理
 
The Use of AI in Indonesia Election 2024: A Case Study
The Use of AI in Indonesia Election 2024: A Case StudyThe Use of AI in Indonesia Election 2024: A Case Study
The Use of AI in Indonesia Election 2024: A Case Study
 
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shopHistory+of+E-commerce+Development+in+China-www.cfye-commerce.shop
History+of+E-commerce+Development+in+China-www.cfye-commerce.shop
 
ER(Entity Relationship) Diagram for online shopping - TAE
ER(Entity Relationship) Diagram for online shopping - TAEER(Entity Relationship) Diagram for online shopping - TAE
ER(Entity Relationship) Diagram for online shopping - TAE
 
How to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptxHow to Use Contact Form 7 Like a Pro.pptx
How to Use Contact Form 7 Like a Pro.pptx
 
The AI Powered Organization-Intro to AI-LAN.pdf
The AI Powered Organization-Intro to AI-LAN.pdfThe AI Powered Organization-Intro to AI-LAN.pdf
The AI Powered Organization-Intro to AI-LAN.pdf
 
Stay Ahead with 2024's Top Web Design Trends
Stay Ahead with 2024's Top Web Design TrendsStay Ahead with 2024's Top Web Design Trends
Stay Ahead with 2024's Top Web Design Trends
 
The Best AI Powered Software - Intellivid AI Studio
The Best AI Powered Software - Intellivid AI StudioThe Best AI Powered Software - Intellivid AI Studio
The Best AI Powered Software - Intellivid AI Studio
 

Testing in Craft CMS