Skip to content

Instantly share code, notes, and snippets.

@roberto-butti
Last active December 16, 2023 23:43
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save roberto-butti/d490a8eb02bf4a540f7fd1715df18970 to your computer and use it in GitHub Desktop.
Save roberto-butti/d490a8eb02bf4a540f7fd1715df18970 to your computer and use it in GitHub Desktop.
GitHub Actions workflow for Laravel (automated test)
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
@LarryBarker
Copy link

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');
}

@roberto-butti
Copy link
Author

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

@roberto-butti
Copy link
Author

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

@LarryBarker
Copy link

LarryBarker commented Nov 18, 2020 via email

@sauerlock
Copy link

sauerlock commented Dec 16, 2023

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment