Reputation: 4608
I have a package that needs to be wrapped by a real laravel app to be tested properly. Unfortunately I cant use the orchestra testbench. However I have setup a Github action for this. But, when running the final step vendor/phpunit/phpunit/phpunit path/to/package
im experiencing the following issues:
setUp()
is public in my parent class though it is protected.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):
Reviewing my master branch, the requested file FileTestCase
is there.
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/[email protected]
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
Below is my base test case. But the setUp method is never called. (Previously it was called TestCase as the default laravel provides - it was renamed while debugging)
<?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!");
}
}
Usage:
<?php
namespace PHPFileManipulator\Tests\Unit;
use PHPFileManipulator\Tests\FileTestCase;
class StupidTest extends FileTestCase
{
/** @test */
public function it_can_run_tests()
{
$this->assertTrue(true);
}
}
Im using PHP 7.4.2 and PHPUnit 8.5.2 (same as github actions ubuntu-latest) Mimicing the action script on my own machine works fine. I have reviewed CASE on github/local found no differences.
Any ideas, what I am missing?
Upvotes: 4
Views: 1431
Reputation: 4608
I failed updating the host app composer.json
repositories section. That meant requiring the package with @dev
flag (taking latest commit) had no effect
- instead an outdated package version was pulled from packagagist.
name: tests
on: [push, pull_request]
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- name: Install host app
run: composer create-project --prefer-dist laravel/laravel host
- name: Checkout the package
uses: actions/checkout@v2
with:
path: host/packages/Ajthinking/PHPFileManipulator
- name: Add composer.json repository
working-directory: ./host
run: composer config repositories.php-file-manipulator path "/home/runner/work/php-file-manipulator/php-file-manipulator/host/packages/Ajthinking/PHPFileManipulator"
- name: Require the 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
Upvotes: 1