Сводка
У меня есть пакет, который должен быть упакован в реальное приложение laravel для правильной проверки. К сожалению, я не могу использовать тестовый стенд оркестра. Однако я настроил действие Github для этого. Но при выполнении последнего шага vendor/phpunit/phpunit/phpunit path/to/package
у меня возникают следующие проблемы:
- PHPUnit не может разрешить определенные классы
- Он считает, что PHPUnit
setUp()
опубликован c в хотя мой родительский класс защищен. - Я подозреваю, что некоторые проблемы с кэшированием или задержкой после pu sh (но я проверил стирание всего кэша, автозагрузку и конфигурацию)
Пример ошибка
Run vendor/phpunit/phpunit/phpunit packages/Ajthinking/PHPFileManipulator/tests
PHP Fatal error: Uncaught Error: Class 'PHPFileManipulator\Tests\FileTestCase' not found in /home/runner/work/php-file-manipulator/php-file-manipulator/host/packages/Ajthinking/PHPFileManipulator/tests/Unit/APIDelegationTest.php:10
Stack trace:
#0 /home/runner/work/php-file-manipulator/php-file-manipulator/host/vendor/phpunit/phpunit/src/Util/FileLoader.php(59): include_once()
#1 /home/runner/work/php-file-manipulator/php-file-manipulator/host/vendor/phpunit/phpunit/src/Util/FileLoader.php(47):
Просмотр моей основной ветки, запрошенный файл FileTestCase
там .
Полный сценарий действия:
name: Laravel-wrapped-package-test
on: [push]
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- name: Install host app
run: composer create-project --prefer-dist laravel/laravel host
- name: Install package (this repo)
uses: actions/checkout@v2
with:
path: host/packages/Ajthinking/PHPFileManipulator
- name: Add this package to composer.json repositories
uses: ajthinking/merge-json-files@v1.0.20
with:
repo_relative_path: 'host/packages/Ajthinking/PHPFileManipulator'
- name: Require this package
working-directory: ./host
run: composer require ajthinking/php-file-manipulator @dev
- name: Publish things
working-directory: ./host
run: php artisan vendor:publish --provider="PHPFileManipulator\ServiceProvider"
- name: Run tests
working-directory: ./host
run: vendor/phpunit/phpunit/phpunit packages/Ajthinking/PHPFileManipulator/tests
TestCase
Ниже приведен мой базовый тестовый пример. Но метод setUp никогда не вызывается. (Ранее он назывался TestCase по умолчанию laravel - он был переименован во время отладки)
<?php
namespace PHPFileManipulator\Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class FileTestCase extends BaseTestCase
{
protected function setUp() : void
{
parent::setUp();
dd("it will never reach this dd call on github actions!");
}
}
Использование:
<?php
namespace PHPFileManipulator\Tests\Unit;
use PHPFileManipulator\Tests\FileTestCase;
class StupidTest extends FileTestCase
{
/** @test */
public function it_can_run_tests()
{
$this->assertTrue(true);
}
}
версии
Я использую PHP 7.4.2 и PHPUnit 8.5.2 (аналогично действиям github ubuntu-latest). Подражание сценарию действия на моей собственной машине работает нормально. Я просмотрел CASE на github / local, не обнаружил различий.
Есть идеи, чего мне не хватает?