Где и как настроить данные для тестирования 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()]);
    }
}

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

Благодарю.

1 ответ

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

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

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

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

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

В любом случае, вы можете создать несколько методов в каждом классе, чтобы просто "заполнить" базу данных необходимой информацией (демонстрация для TestsData / Zoo / 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()]);
    }
}
Другие вопросы по тегам