Możemy to osiągnąć dość łatwo przy użyciu klas rozszerzających kodeki. Co będziemy robić z rozszerzeniami, to:
Dołącz do wydarzeń "przed testem" i "po teście" z naszym rozszerzeniem Ponownie skonfiguruj moduł Db tak, aby wskazywał na nasz serwis internetowy, ponownie zainicjuj moduł i Wykonaj Powtórz dla każdej usługi internetowej Aby rozpocząć, musimy najpierw włączyć moduł Db w naszych testach akceptacyjnych. Postępuj zgodnie z instrukcjami, aby skonfigurować moduł Db. Ważne jest to, że ustawiliśmy wypełnianie i czyszczenie na false, a to zrzutu wskazuje na poprawny plik. Ustawiamy populację i czyścimy na false, ponieważ nie chcemy, aby moduł Db był wypełniany i czyszczony po każdym teście. Cóż, robimy, ale domyślnie moduł Db komunikuje się tylko z jedną bazą danych, w której potrzebujemy wielu.
Po drugie, postępuj zgodnie z instrukcjami tworzenia podstawowego rozszerzenia Codecepcji. Po skonfigurowaniu klasa, skonfigurowany i włączyła ją w bootstrap, można użyć poniższy kod jako przewodnik:
class YourExtensionClass extends \Codeception\Platform\Extension {
// events to listen on
static $events = array(
'test.before' => 'beforeTest',
'test.after' => 'afterTest',
);
function beforeTest(\CodeCeption\Event\Test $e)
{
// get the test and groups
$test = $e->getTest();
$groups = $test->getScenario()->getGroups();
// only restore if annotated to do so
if (in_array('api', $groups)) {
// get the Db module
$db = $this->getModule('Db');
// re-initialize with web service one api config and execute
$webserviceOneConfig = $this->getWebServiceOneConfig($this->config);
$db->_reconfigure($webserviceOneConfig);
$db->_initialize();
$db->_before($test);
// re-initialize with web service two api config and execute
$webserviceTwoConfig = $this->getWebServiceTwoConfig($this->config);
$db->_reconfigure($webserviceTwoConfig);
$db->_initialize();
$db->_before($test);
}
}
function afterTest(\CodeCeption\Event\Test $e)
{
// get the test and groups
$test = $e->getTest();
$groups = $test->getScenario()->getGroups();
// only restore if annotated to do so
if (in_array('api', $groups)) {
// get the Db module
$db = $this->getModule('Db');
// re-initialize with web service one api config and execute
$webserviceOneConfig = $this->getWebServiceOneConfig($this->config);
$db->_reconfigure($webserviceOneConfig);
$db->_initialize();
$db->_after($test);
// re-initialize with web service two api config and execute
$webserviceTwoConfig = $this->getWebServiceTwoConfig($this->config);
$db->_reconfigure($webserviceTwoConfig);
$db->_initialize();
$db->_after($test);
}
}
private function getWebServiceOneConfig($config)
{
return array(
'dsn' => 'your first webservice db dsn',
'dump' => '/path/to/your/first/dump/file',
'populate' => true,
'cleanup' => true,
);
}
private function getWebServiceTwoConfig($config)
{
return array(
'dsn' => 'your second webservice db dsn',
'dump' => '/path/to/your/second/dump/file',
'populate' => true,
'cleanup' => true,
);
}
Jeśli mam setup rozszerzenie do jedynego ognia czy dany test jest prawidłowo odnotowany, co jest :
// in a Cest
/**
* @group api
*/
public function hereIsSomeTest(WebGuy $I)
{
...
}
// in a Cept
$scenario->group('api');
$I = new WebGuy($scenario);
mogę skonfigurować rozszerzenie do przestrzegania „API” adnotacji więc nie miałem do konfiguracji i zburzyć moich baz danych API na każdym teście, tylko te, które dotyczą danych. Można jednak bardzo łatwo modyfikować w zależności od potrzeb.
Patrząc na [plik źródłowy] (https://github.com/Codeception/Codeception/blob/2.1/src/Codeception/Module/Db.php) myślę, że nie jest to możliwe po wyjęciu z pudełka . –