Тестирование API-оболочки с phpspec

Я пытаюсь создать оболочку для класса API, используя TDD с phpspec.

Я написал Client класс, который имеет дело с запросом / извлечением данных из REST API, который затем отображается на один из нескольких Entity классы, поэтому он ведет себя как ORM.

Я немного застрял, теперь я пришел, чтобы проверить и расширить приложение с помощью TDD. Как Client это зависимость классов сущностей (чтобы они могли запрашивать свои собственные дочерние объекты), я борюсь с этим.

Например, вот что из сущностей, Comic.phpможет выглядеть так:

class Comic {

protected $client;

public $id;

public function __construct(Client $client)
{
$this->client = $client;
}

public function getCharacters()
{
// just an example, this would return an array of Character objects
return $this->client->request("comic/{$this->id}/characters");
}

}

И для краткости вот что упрощенная версия Client.php похоже:

class Client {

public function __construct($publicKey, $privateKey)
{
// make token from $publicKey, $privateKey
}

public function request($endpoint)
{
// use token for cURL request to endpoint and return data
}

}

Так как же тест на ComicSpec.php за it_gets_all_characters() посмотрите, как пример?

Надеюсь, что это имеет смысл, может предоставить больше информации, если это необходимо.

Спасибо, что посмотрели.

0

Решение

Я не уверен it_gets_all_characters было бы то, что вы тестируете в ComicSpec так как получение всех персонажей не похоже на Comic обязанности. Правильно?

Какие Comic Нужно сделать (его обязанность) — позвонить клиенту и довериться ему, чтобы получить символы. Так в ComicSpec ты должен насмехаться Client и проверить это Comic вызывает его с правильным сообщением и параметрами:

В ComicSpec:

function it_gets_all_characters(Client $client)
{
$this->beConstructedWith($client);

$client->request(Argument::any())->shouldBeCalled();

$this->getCharacters();
}

Обратите внимание, что вы не тестировали вызов API, поэтому вам также нужно ClientSpec сделать это. Если вы используете curl Я думаю, что это в принципе невозможно проверить (без фактического вызова службы), но, возможно, вы можете использовать пропивать. В ClientSpec вы бы посмеялись над HttpClient и протестировали бы Client вызывает его с правильным сообщением и параметрами.

Надеюсь, это поможет!

0

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

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

По вопросам рекламы [email protected]