sl0wlydeadly / pimcore-codeception-config-files
Pimcore Files For Codeception Test Environment Configuration
Installs: 23
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 0
Type:pimcore-bundle
Requires (Dev)
- codeception/codeception: ^4.1.12
- codeception/module-symfony: ^1.6.0
- doctrine/dbal: ^2.12
- phpunit/phpunit: >=9.3
- pimcore/pimcore: >= 5.4
- symfony/dependency-injection: ^5.3.3
- symfony/event-dispatcher: ^5.4.0
- symfony/filesystem: ^5.2.0
- symfony/finder: ^5.2.0
- symfony/http-kernel: ^5.3
README
Pimcore Files For Codeception Test Environment Configuration
Install
Run this command
composer require sl0wlydeadly/pimcore-codeception-config-files
DB Configuration
- Log into your MariaDB client as root
mysql -u [root username] -p[root password]
- Create a different DB for tests to run i.e. pimcore_test
CREATE DATABASE pimcore_test;
- Give your pimcore user priviledges to that DB
GRANT ALL PRIVILEGES ON pimcore_test.* TO 'pimcore'@'%';
Setup test config in your Pimcore project
- [Example] we have a docker DB container at port 3306 called db and a test DB called pimcore_test then the doctrine dbal part of config under config/packages/test/config.yaml should look like this:
doctrine:
dbal:
connections:
default:
host: db
port: '3306'
dbname: pimcore_test
user: pimcore
password: pimcore
Setup your bootstrap.php according to Pimcore documentation for codeception tests
- Mine looks something like this:
<?php
// tests/_bootstrap.php
use App\Kernel;
use Pimcore\Bootstrap;
// define project root which will be used throughout the bootstrapping process
define('PIMCORE_PROJECT_ROOT', realpath(__DIR__ . '/..'));
const PROJECT_ROOT = PIMCORE_PROJECT_ROOT;
$kernel = Kernel::class;
// set the used pimcore/symfony environment
foreach (['APP_ENV' => 'test', 'PIMCORE_SKIP_DOTENV_FILE' => true] as $name => $value) {
putenv("{$name}={$value}");
$_ENV[$name] = $_SERVER[$name] = $value;
}
putenv("KERNEL_CLASS={$kernel}");
$_ENV["KERNEL_CLASS"] = $kernel;
require_once PIMCORE_PROJECT_ROOT . '/vendor/autoload.php';
Bootstrap::setProjectRoot();
Bootstrap::bootstrap();
Bootstrap::kernel();
Setup your codeception configurations
- In the root path of your Pimcore project you should have a tests directory.
- In tests directory make sure you have a codeception.dist.yml configuration file. You may modify and adjust the content to your preferences but as default it should look something like this:
# tests/codeception.dist.yml
namespace: Tests
support_namespace: Support
actor_suffix: Tester
paths:
tests: .
output: ./_output
data: ./Support/Data
support: ./Support
envs: ./_envs
settings:
bootstrap: _bootstrap.php
colors: true
params:
- env
extensions:
enabled:
- Codeception\Extension\RunFailed
- Set up your Test suite config to use the package data to recreate the test database after a test run. Below example for Unit test suite configuring Unit.suite.yml should look something like that:
suite_namespace: \App\Tests\Unit
actor: UnitTester
modules:
enabled:
- Asserts
- \Sl0wlydeadly\PimcoreCodeceptionConfigFiles\Support\Helper\Pimcore:
# CAUTION: the following config means the test runner
# will drop and re-create the Pimcore DB and purge var/classes
# use only in a test setup (e.g. during CI)!
connect_db: true
initialize_db: true
purge_class_directory: false
# If true, it will create database structures for all definitions
setup_objects: false
For more config info read the official Pimcore documentation under Codeception tests
Build your codeception config
Run following command:
php vendor/bin/codecept build
Run tests of your configured test suite using test as environment
php vendor/bin/codecept run -c . Unit --env=test