2017 © Pedro Peláez
 

library pw-test-helper

Helper classes/functions for ProcessWire testing

image

lostkobrakai/pw-test-helper

Helper classes/functions for ProcessWire testing

  • Thursday, December 22, 2016
  • by LostKobrakai
  • Repository
  • 1 Watchers
  • 0 Stars
  • 19 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 8 Versions
  • 0 % Grown

The README.md

ProcessWire Test Helper

Helper classes to enable automatic test db setup and browser testing with ProcessWire. The core classes should be usable by any testing framework, but currently the only real implementation is using kahlan/kahlan., (*1)

To install run the following in the terminal:, (*2)

composer require --dev lostkobrakai/pw-test-helper, (*3)

Kahlan

Install Kahlan also via composer:, (*4)

composer require --dev kahlan/kahlan, (*5)

Create or update your kahlan-config.php, (*6)

<?php

use LostKobrakai\TestHelpers\Kahlan\SetupInclude;

// Create a unique db name for the testruns
$dbName = 'pw_' . md5(__DIR__ . time());

// Path to the ProcessWire root folder
$path = __DIR__;

// Browsertest settings
$browserSettings = [
    // Send db name as request header
    'database' => $dbName,

    // Allow for relative urls in tests
    'rootUrl' => 'http://db_tests.valet/'
];

// Add DB integration
/** @noinspection PhpIncludeInspection */
include SetupInclude::db();

// Add Browsertest integration
/** @noinspection PhpIncludeInspection */
include SetupInclude::browser();

The database part does setup the test database and includes a bootstrapped processwire instance in kahlan. It's accessable in tests like this:, (*7)

it('should find the processwire homepage', function() {
    expect($this->processwire->pages->get('/')->id)->toBe(1);
});

The browser testing is implemented by using Behat/Mink, so there are only some helper function to kick off things. Otherwise it's api is documented for the Mink package. The current driver is zombie. A headless node based driver which is quite fast. It does require npm i zombie --save-dev to be present., (*8)

it('should be able to load the page for inspection', function() {
    $this->browser->visit('/');

    // Check the page for specific text or elements
    expect($this->browser->element('h1')->getText())->toBe('Home');

    // Kahlan does have support for async expectations
    // It waits until an optional timeout to see the text
    waitsFor(function() {
        return $this->browser->page();
    })->toContain('Home');
});

When using browsertesting the request by default doesn't know anything about the temporary test database. Therefore this is needed in your config.php below the actual database config. This way the request can processwire to use the test db instead of your normal one., (*9)

/**
 * Change db for browser testings
 */
if(isset($_SERVER['HTTP_X_TEST_WITH_DB']) && $_SERVER['HTTP_X_TEST_WITH_DB']){
    $config->dbName = $_SERVER['HTTP_X_TEST_WITH_DB'];
}

When using InnoDB it's besides the already temporary test database possible to use database transactions to avoid having sideeffects in test. With the following db changes are revoked after each test., (*10)

describe('…', function() {
        beforeEach(function() {
            $this->processwire->database->beginTransaction();
        });

        afterEach(function() {
            $this->processwire->database->rollBack();
        });

        […]
});

The Versions

22/12 2016

dev-master

9999999-dev

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

22/12 2016

0.0.7

0.0.7.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

14/12 2016

0.0.6

0.0.6.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

14/12 2016

0.0.5

0.0.5.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

14/12 2016

0.0.4

0.0.4.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

14/12 2016

0.0.3

0.0.3.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

14/12 2016

0.0.2

0.0.2.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT

The Requires

 

14/12 2016

0.0.1

0.0.1.0

Helper classes/functions for ProcessWire testing

  Sources   Download

MIT