Где и как настроить данные для тестирования Codeception Api (Cests)

Я настраиваю Codeception для тестирования Api.

У меня есть класс Cest, скажем …

class ZooCest {
public function addingALionToZoo(ApiTester $I)
{
$I->sendPost('zoo/add_animal', ['animal_id' => $animalId]);
}
}

Вопрос в том, где и как мне настроить данные для проверки моего API.

Следуя предыдущему примеру, я мог бы сделать это:

class ZooCest {
public function addingALionToZoo(ApiTester $I)
{
$lion = new Animal('lion');
$lion->save();

$I->sendPost('zoo/add_animal', ['animal_id' => $lion->getId()]);
}
}

Но это становится грязным, когда бизнес-логика сложна.

Я мог бы иметь фактор-фактор в папке поддержки, поэтому я мог бы так:

class ZooCest {
public function addingALionToZoo(ApiTester $I)
{
$lion = DataFactory::create('lion');

$I->sendPost('zoo/add_animal', ['animal_id' => $lion->getId()]);
}
}

Но это может сильно возрасти, становясь все более и более сложным с течением времени, достигая точки, в которой нам, возможно, даже понадобится проверить эту логику! (да, это шутка)

Благодарю.

3

Решение

Я не думаю, что есть «лучшее место» для этого, поскольку все зависит от вашего проекта и ваших тестов, так что это больше похоже на теоретический ответ.

Если у вас есть (или может быть) такая много логики, я бы, вероятно, создал бы новый каталог именно для такого рода вещей, где вы можете создать столько классов, сколько это имеет смысл для вас. Например:

- app
- TestsData
- Zoo.php
- Oceanarium.php
- Theatre.php
- Shop.php

Из вас можно пойти еще дальше и разделить это так:

- app
- TestsData
- Zoo
- Lion.php
- Monkey.php
- Oceanarium
- Shark.php

В любом случае, вы можете создать несколько методов в каждом классе, чтобы «заполнить» базу данных нужной вам информацией (демонстрация для TestsData / Зоопарк / Lion.php).

<?php

use Animal;

class Lion
{
public static function add() {
$lion = new Animal('lion');
$lion->save();

return $lion;
}
}

Затем в ваших тестах используйте:

class ZooCest {
public function addingALionToZoo(ApiTester $I)
{
$I->sendPost('zoo/add_animal', ['animal_id' => Lion::add()]);
}
}
0

Другие решения

Других решений пока нет …