Обычные тесты абстрактного класса Omnipay терпят неудачу

Я просто смотрю на Omnipay с целью добавить поддержку другого шлюза. После установки с помощью Composer я попытался запустить тесты Paypal (в качестве примера шлюза) и Omnipay Common. В обоих пакетах я настроил bootstrap.php, чтобы он мог найти файл автозагрузки композитора. Тесты Paypal проходят нормально (зеленый).

Тем не менее, обычные тесты терпят неудачу с 1 отказом и 38 ошибками. Все сбои/ошибки есть в AbstractGatewayTest, AbstractRequestTest, AbstractResponseTest.

Это заставляет меня задаться вопросом, изменилось ли что-то в том, как PHPUnit или Mockery обрабатывают имитированные абстрактные классы. Я использую PHPUnit 3.7.34. Совсем недавно я использовал PHPUnit 4.0.* для проектов Laravel, но для Omnipay требуется версия 3.7.

composer.lock указывает, что я использую Mockery 0.9.0. Я использую php 5.4. *, установленный через macports на OS X Mavericks.

У кого-нибудь есть понимание того, что может сбить меня с толку? Спасибо!

РЕДАКТИРОВАТЬ: Примеры сообщений об ошибках:

Было 38 ошибок:

1) Omnipay\Common\AbstractGatewayTest::testGetShortName
BadMethodCallException: Method Mockery_0_Omnipay_Common_AbstractGateway::getDefaultParameters() does not exist on this mock object

.../vendor/omnipay/common/src/Omnipay/Common/AbstractGateway.php:53
.../vendor/omnipay/common/src/Omnipay/Common/AbstractGateway.php:40
.../vendor/mockery/mockery/library/Mockery/Container.php:426
.../vendor/mockery/mockery/library/Mockery/Container.php:210
.../vendor/mockery/mockery/library/Mockery.php:71
.../vendor/omnipay/common/tests/Omnipay/Common/AbstractGatewayTest.php:12

2) Omnipay\Common\Message\AbstractRequestTest::testInitializeWithParams
Argument 1 passed to Omnipay\Common\Message\AbstractRequest::__construct() must implement interface Guzzle\Http\ClientInterface, none given

.../vendor/omnipay/common/src/Omnipay/Common/Message/AbstractRequest.php:46
.../vendor/mockery/mockery/library/Mockery/Container.php:426
.../vendor/mockery/mockery/library/Mockery/Container.php:210
.../vendor/mockery/mockery/library/Mockery.php:71
.../vendor/omnipay/common/tests/Omnipay/Common/Message/AbstractRequestTest.php:14

где "..." - моя область исходного кода.


person Edward Barnard    schedule 04.04.2014    source источник
comment
Что вы имеете в виду, говоря, что я настроил bootstrap.php, чтобы он мог найти файл автозагрузки композитора? Вам не нужно ничего настраивать. Travis CI, похоже, нормально проводит тесты. Вы должны запускать тесты в отдельной кассе репозитория omnipay, а не в своем основном проекте.   -  person Adrian Macneil    schedule 05.04.2014


Ответы (1)


Следуя совету и объяснениям Адриана Макнила, я отдельно проверил общие файлы Omnipay, и модульные тесты действительно запустились зеленым (успешно):

git clone [email protected]:omnipay/common.git
cd common/
composer update --dev && composer dump-autoload
vendor/bin/phpunit 

дает:

PHPUnit 3.7.34 by Sebastian Bergmann.

Configuration read from /Users/ewb/startrib/omnipay/common/phpunit.xml.dist

...............................................................  63 / 161 ( 39%)
............................................................... 126 / 161 ( 78%)
...................................

Time: 94 ms, Memory: 8.00Mb

OK (161 tests, 258 assertions)

Для записи я настраиваю bootstrap.php следующим образом. Это позволяет мне запускать тесты, когда Composer включает их в качестве зависимостей. Я новичок как в композиторе, так и в Laravel (omnipay не имеет ничего общего с Laravel), поэтому мой подход не является лучшей практикой. Спасибо за совет!

Следующая версия bootstrap.php поднимается по дереву исходных текстов (с ограничением корректности в 5 уровней), пока не найдет каталог, содержащий vendor/autoload.php.

<?php

error_reporting(E_ALL | E_STRICT);

// Locate and include the composer autoloader
$sanity = 5;
$dir = realpath(__DIR__);
do {
    $dir = dirname($dir);
    $autoload = $dir.'/vendor/autoload.php';
} while ($sanity-- && !file_exists($autoload));
$autoloader = require $autoload;

// autoload abstract TestCase classes in test directory
$autoloader->add('Omnipay', __DIR__);
person Edward Barnard    schedule 05.04.2014