Mocking System Classes
Several components within the framework provide mocked versions of their classes that can be used during testing. These classes can take the place of the normal class during test execution, often providing additional assertions to test that actions have taken place (or not taken place) during the execution of the test. This might be checking data gets cached correctly, emails were sent correctly, etc.
Cache
You can mock the cache with the mock()
method, using the CacheFactory
as its only parameter.
<?php
$mock = mock(\CodeIgniter\Cache\CacheFactory::class);
While this returns an instance of CodeIgniter\Test\Mock\MockCache
that you can use directly, it also inserts the
mock into the Service class, so any calls within your code to service('cache')
or Config\Services::cache()
will
use the mocked class within its place.
When using this in more than one test method within a single file you should call either the clean()
or bypass()
methods during the test setUp()
to ensure a clean slate when your tests run.
Additional Methods
You can instruct the mocked cache handler to never do any caching with the bypass()
method. This will emulate
using the dummy handler and ensures that your test does not rely on cached data for your tests.
<?php
$mock = mock(\CodeIgniter\Cache\CacheFactory::class);
// Never cache any items during this test.
$mock->bypass();
Available Assertions
The following new assertions are available on the mocked class for using during testing:
<?php
$mock = mock(\CodeIgniter\Cache\CacheFactory::class);
// Assert that a cached item named $key exists
$mock->assertHas($key);
// Assert that a cached item named $key exists with a value of $value
$mock->assertHasValue($key, $value);
// Assert that a cached item named $key does NOT exist
$mock->assertMissing($key);