-
-
Save roberto-butti/d490a8eb02bf4a540f7fd1715df18970 to your computer and use it in GitHub Desktop.
name: Laravel | |
on: | |
push: | |
branches: [ main ] | |
pull_request: | |
branches: [ main ] | |
jobs: | |
laravel-tests: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Copy .env | |
run: php -r "file_exists('.env') || copy('.env.example', '.env');" | |
- name: Install Dependencies | |
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist | |
- name: Generate key | |
run: php artisan key:generate | |
- name: Directory Permissions | |
run: chmod -R 777 storage bootstrap/cache | |
- name: Create Database | |
run: | | |
mkdir -p database | |
touch database/database.sqlite | |
- name: Execute tests (Unit and Feature tests) via PHPUnit | |
env: | |
DB_CONNECTION: sqlite | |
DB_DATABASE: database/database.sqlite | |
run: vendor/bin/phpunit --testdox |
I am having issue with session. Works on local machine. Always fails on Github Actions.
protected function signInAsAdmin($admin = null)
{
$admin = $admin ?: factory('App\Admin')->create();
$this->actingAs($admin, 'admin');
return $admin;
}
the test code looks like this
/** @test */
public function test_admin_can_update_a_referral()
{
$this->signInAsAdmin();
$program = factory('App\Referral')->create();
$this->patch(route('admin.referral.update', $referral->id), $attributes = [
'name' => 'Changed'
])->assertRedirect(route('admin.referral.index'));
}
Test passes on local. Fails on Github Actions with error Response status code [403] is not a redirect status code.
my phpunit.xml looks like this
<php>
<server name="APP_ENV" value="testing"/>
<server name="BCRYPT_ROUNDS" value="4"/>
<server name="CACHE_DRIVER" value="array"/>
<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>
<server name="MAIL_DRIVER" value="array"/>
<server name="QUEUE_CONNECTION" value="sync"/>
<server name="SESSION_DRIVER" value="array"/>
</php>
@michaeldigitalfractal I'm having a very similar issue, except I'm getting status code 500 not a redirect status code. Did you ever figure this out?
@LarryBarker try to take a look with this updated snippet
https://github.com/roberto-butti/laravel7-ghactions/blob/master/.github/workflows/laravel_db_manual.yml
@roberto-butti thanks for the reply. What am I looking for specifically? Mostly seems like dB configuration and docker setup? I’m not using any of that, and the error makes me think it’s not related to the database but routes? Correct me if I’m wrong though.
@roberto-butti thanks for the reply. What am I looking for specifically? Mostly seems like dB configuration and docker setup? I’m not using any of that, and the error makes me think it’s not related to the database but routes? Correct me if I’m wrong though.
@LarryBarker could you share here your snippet of your test ? I would like to replicate your issue, to see if I could help.
Sure, it’s related to Livewire, but the test fails before the Livewire assertion. Here’s the first test that fails:
?php
namespace Tests\Feature\Auth;
use App\Admin;
use App\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Livewire\Livewire;
use Tests\TestCase;
class LoginTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function can_view_login_page()
{
$this->get(route('login'))
->assertSuccessful()
->assertSeeLivewire('auth.login');
}
Hi @LarrayBraker, I'm using this basic yml file for GH Actions:
name: Laravel
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
laravel-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Copy .env
run: php -r "file_exists('.env') || copy('.env.example', '.env');"
- name: Install Dependencies
run: composer install -q --no-ansi --no-interaction --no-scripts --no-progress --prefer-dist
- name: Generate key
run: php artisan key:generate
- name: Directory Permissions
run: chmod -R 777 storage bootstrap/cache
- name: Create Database
run: |
mkdir -p database
touch database/database.sqlite
- name: Execute tests (Unit and Feature tests) via PHPUnit
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
run: vendor/bin/phpunit --testdox
The Feature test used is:
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class RoutingTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function can_view_login_page()
{
$this->get(route('login'))
->assertSuccessful();
}
/** @test */
public function can_view_public_page()
{
$this->get(route('index'))
->assertSuccessful();
}
/** @test */
public function can_not_view_protected_page()
{
$this->get(route('dashboard'))
->assertRedirect();
}
}
this is ok, and everything is fine, locally and on github actions.
Now i will try to add "assertSeeLivewire" method
I have tried also the assertSeeLiverwire. method:
<?php
namespace Tests\Feature;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class RoutingTest extends TestCase
{
use RefreshDatabase;
protected $seed = true;
/** @test */
public function can_view_login_page()
{
$this->get(route('login'))
->assertSuccessful();
}
/** @test */
public function can_view_public_page()
{
$this->get(route('index'))
->assertSuccessful();
}
/** @test */
public function can_not_view_protected_page()
{
$this->get(route('dashboard'))
->assertRedirect();
}
/** @test */
public function user_can_view_protected_page()
{
$this->actingAs(User::first())->get(route('dashboard'))
->assertOk();
}
/** @test */
public function user_can_view_protected_form()
{
$this->actingAs(User::first())->get(route('merchant.menu.create'))
->assertOk()->assertSeeLivewire("merchant.menu.edit-form");
}
}
I updated yml file with these things:
- using v2 of actions checkout: actions/checkout@v2
- fixing directory pemrissions: chmod -R 777 storage bootstrap/cache
- adding env parameters for DB_CONNECTION and DB_DATABASE
I am getting this error in Git Actions in local works fine
Run php artisan test --parallel --recreate-databases
php artisan test --parallel --recreate-databases
shell: /usr/bin/bash -e {0}
env:
DB_CONNECTION: sqlite
DB_DATABASE: database/database.sqlite
.........................
Tests: 25 passed (59 assertions)
Duration: 1.00s
Parallel: 4 processes
Error: Process completed with exit code 1.
Hi @hyhilman , as you can see we have a step that copy .env.ci into .env.
.env.ci is a basic env file (maybe you can start from .env.example included in your laravel installation) and edit these two parameters:
DB_CONNECTION=sqlite
DB_DATABASE=database/database.sqlite
Take a look this post:
https://medium.com/@robertodev/continuous-integration-with-github-actions-and-laravel-6-e6cb9aa5aea9