Testing in Craft CMS

Post on 13-Mar-2023

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

Transcript

WELCOME!

Testing in Craft CMSCharlotte Craft CMS Meetup

Nov 13, 2019 Justin Holt - Presenter

Thank You

Providing Meeting Hosting

Sponsoring Food &

Beverages

Testing in Craft CMS

Agenda1. 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 CodeceptionInstall via composer in project root:

Installing CodeceptionTest 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 FixturesFixtures: 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 craft\test\fixtures\elements\…Fixture

Offloading Tests to Queue1. 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!

top related