Skip to content

PHPUnit Kit

PHPUnit integration.

Features

  • Run a test
  • Run a test file
  • Run the test suite
  • Run the nearest test
  • Run the last test
  • Run tests via SSH
  • Run tests via Docker
  • Run tests via sidebar and context menus
  • Run multiple tests (multiple cursor)
  • Auto-run tests on save
  • Jump to next and previous failures
  • File and test switcher
  • Toggle options
  • Fully customizable
  • Zero configuration required
  • Support for:
    • Artisan - Artisan is the command-line interface included with Laravel.
    • Composer - Composer is a Dependency Manager for PHP.
    • iTerm2 - iTerm2 brings the terminal into the modern age.
    • Kitty - Kitty is a fast, feature-rich, cross-platform, GPU-based terminal.
    • ParaTest - ParaTest adds parallel testing support in PHPUnit.
    • Pest - Pest is a testing framework with a focus on simplicity.
    • xterm - A terminal emulator for the X Window System.
    • cmd - A command-line interpreter for Windows.
    • PowerShell - A cross-platform command-line shell.
    • Tmux - A terminal multiplexer.

Installation

Prerequisites

Package Control installation
  1. Open the Command Palette: Ctrl+Shift+P (Win/Linux) or Cmd+Shift+P (Mac).
  2. Type "Package Control: Install Package" and press Enter.
  3. In the input field, type "PHPUnitKit" and select it from the list of available packages.

NOTE

You may need to restart Sublime Text.

Manual Git installation
  1. Navigate to the Sublime Text Packages directory:
    ~/.config/sublime-text/Packages
    ~/Library/Application Support/Sublime Text/Packages
    %APPDATA%\Sublime Text\Packages
  2. Clone directly into the Packages directory:
    bash
    git clone https://github.com/gerardroche/sublime-phpunit.git PHPUnitKit

NOTE

You may need to restart Sublime Text.

Command Palette

CommandDescription
PHPUnit: Test NearestExecutes the test closest to the cursor. If the current file isn't a designated test file, it runs tests for the current file.
PHPUnit: Test FileRuns tests for the currently open file. If it's not a test file, it runs tests for the current file.
PHPUnit: Test SuiteRuns the test suite associated with the current file.
PHPUnit: Test LastRuns the most recently executed test.
PHPUnit: Test SwitchIn a test file, opens the file under test; otherwise, opens the corresponding test file.
PHPUnit: Test VisitQuickly accesses the last run test.
PHPUnit: Test ResultsOpens the test output panel (applies to "sublime" strategy).
PHPUnit: Test CancelHalts any ongoing test executions.
PHPUnit: Test CoverageViews code coverage using your default browser.
PHPUnit: Toggle...Various toggle commands.

Key Bindings

KeyDescription
F4Jump to the next failure
Shift+F4Jump to the previous failure
Create your preferred key bindings

Command Palette → Preferences: Key Bindings

jsonl
{ "keys": ["ctrl+shift+a"], "command": "phpunit_test_suite" },
{ "keys": ["ctrl+shift+c"], "command": "phpunit_test_cancel" },
{ "keys": ["ctrl+shift+f"], "command": "phpunit_test_file" },
{ "keys": ["ctrl+shift+l"], "command": "phpunit_test_last" },
{ "keys": ["ctrl+shift+n"], "command": "phpunit_test_nearest" },
{ "keys": ["ctrl+shift+r"], "command": "phpunit_test_results" },
{ "keys": ["ctrl+shift+s"], "command": "phpunit_test_switch" },
{ "keys": ["ctrl+shift+v"], "command": "phpunit_test_visit" }
jsonl
{ "keys": ["super+shift+a"], "command": "phpunit_test_suite" },
{ "keys": ["super+shift+c"], "command": "phpunit_test_cancel" },
{ "keys": ["super+shift+f"], "command": "phpunit_test_file" },
{ "keys": ["super+shift+l"], "command": "phpunit_test_last" },
{ "keys": ["super+shift+n"], "command": "phpunit_test_nearest" },
{ "keys": ["super+shift+r"], "command": "phpunit_test_results" },
{ "keys": ["super+shift+s"], "command": "phpunit_test_switch" },
{ "keys": ["super+shift+v"], "command": "phpunit_test_visit" }

Strategies

You can run tests using different execution environments known as "strategies".

StrategyIdentifierDescription
Sublime
(default)
sublimeSends test commands to Sublime Text's exec output panel.
iTerm2.appitermSends test commands to iTerm2 >= 2.9.
KittykittySends test commands to the Kitty terminal.
xtermxtermSends test commands to the xterm terminal.
cmdcmdSends test commands to the cmd.exe terminal.
PowerShellpowershellSends test commands to the PowerShell command shell.
TmuxtmuxSends test commands to the Tmux terminal multiplexer.
Example: Use the Tmux strategy

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.strategy": "tmux"

Settings

Command Palette → Preferences: PHPUnit Settings

phpunit.options

  • Type: dict
  • Default: {}

Default command-line options to pass to PHPUnit.

Examples

If you want some CLI options to stick around, you can configure them in your settings.

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.options": {
    "no-coverage": true,
    "no-progress": true,
    "colors=never": true,
    "order-by=": "defects",
    "coverage-html": "build/coverage",
    "d": ["display_errors=1", "xdebug.scream=0"],
}

The above options will be passed to PHPUnit as CLI options:

shell
-d "display_errors=1" \
-d "xdebug.scream=0" \
--no-coverage \
--no-progress \
--colors=never \
--order-by=defects \
--coverage-html build/coverage

Example: Ignore code coverage reporting configured in the XML configuration file

This can help keep your tests fast. You can toggle no-coverage from the command palette when you need it.

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.options": {
    "no-coverage": true,
}

Example: Stop after first error, failure, warning, or risky test

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.options": {
    "stop-on-defect": true
}

Example: Disable progress and output

This is useful if you are migrating from PHPUnit to Pest and want to hide superfluous output.

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.options": {
    "no-progress": true,
    "no-output": true,
}

phpunit.executable

  • Type: string | list
  • Default: Auto-discovery

The path to the PHPUnit executable to use when running tests.

Environment variables and user home directory ~ placeholders are expanded.

Examples

Command Palette → Preferences: PHPUnit Settings

As a string.

jsonl
"phpunit.executable": "vendor/bin/phpunit",

With placeholder

jsonl
"phpunit.executable": "~/path/to/phpunit",

With arguments.

jsonl
"phpunit.executable": ["artisan", "test"]

phpunit.php_executable

  • Type: string
  • Default: Auto-discovery

The path to the PHP executable to use when running tests.

Environment variables and user home directory ~ placeholders are expanded.

Example

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.php_executable": "~/.phpenv/versions/8.2/bin/php"

phpunit.save_all_on_run

  • Type: boolean
  • Default: true

Automatically save all unsaved views before running tests.

phpunit.on_post_save

  • Type: list
  • Default: []

Auto commands to execute when views are saved.

NOTE

Currently supports running the test file command.

Example
jsonl
"phpunit.on_post_save": [
    "phpunit_test_file"
]

phpunit.debug

  • Type: boolean
  • Default: false

Enable debug logging when running tests.

phpunit.prepend_cmd

  • Type: list
  • Default: []

Prepends custom commands to the test runner.

phpunit.strategy

  • Type: string
  • Default: sublime

The execution environment used for running tests.

phpunit.font_size

  • Type: integer
  • Default: Editor default

Font size of PHPUnit's output.

phpunit.composer

  • Type: boolean
  • Default: true

Discover and use Composer executables.

phpunit.artisan

  • Type: boolean
  • Default: false

Discover and use Artisan to run tests.

phpunit.paratest

  • Type: boolean
  • Default: false

Discover and use ParaTest to run tests.

phpunit.pest

  • Type: boolean
  • Default: false

Discover and use Pest to run tests.

phpunit.ssh

  • Type: boolean
  • Default: false

Enable SSH for remote testing.

Example

Run tests via SSH using Laravel Homestead

jsonl
"phpunit.ssh": true,
"phpunit.ssh_options": {
    "-p": "22",
    "-tt": true
},
"phpunit.ssh_user": "vagrant",
"phpunit.ssh_host": "homestead.test",
"phpunit.ssh_paths": {
    "~/code/project1": "~/project1",
    "/home/code/project2": "/home/vagrant/project2",
}

phpunit.ssh_options

  • Type: dict
  • Default: {}

Options for running tests via SSH.

Example
jsonl
"phpunit.ssh_options": {
    "-p": "22",
    "-tt": true
}

phpunit.ssh_user

  • Type: string
  • Default: null

User for running tests via SSH.

Example
jsonl
"phpunit.ssh_user": "vagrant"

phpunit.ssh_host

  • Type: string
  • Default: null

Host for running tests via SSH.

Example
jsonl
"phpunit.ssh_host": "homestead.test"

phpunit.ssh_paths

  • Type: dict
  • Default: {}

Path mapping for SSH.

Environment variables and user home directory ~ placeholders are expanded.

Example
jsonl
"phpunit.ssh_paths": {
    "~/code/project1": "~/project1"
}

phpunit.docker

  • Type: boolean
  • Default: false

Enable Docker for testing.

Example

Run tests via Docker

jsonl
"phpunit.docker": true,
"phpunit.docker_command": ["docker", "exec", "-it", "my-container"],
"phpunit.docker_paths": {
    "~/code/project1": "~/project1",
    "/home/code/project2": "/home/vagrant/project2",
}

phpunit.docker_command

  • Type: list
  • Default: []

Command to use when running tests via Docker.

Example
jsonl
"phpunit.docker_command": [
    "docker",
    "exec",
    "-it",
    "my-container"
]

phpunit.docker_paths

  • Type: dict
  • Default: {}

Path mapping for Docker.

Environment variables and user home directory ~ placeholders are expanded.

Example
jsonl
"phpunit.docker_paths": {
    "~/code/project1": "~/project1"
}

phpunit.tmux_clear

  • Type: bool
  • Default: true

Clear the terminal screen before running tests.

phpunit.tmux_clear_scrollback

  • Type: bool
  • Default: true

Clear the terminal's scrollback buffer or do not attempt to clear it using the extended "E3" capability.

phpunit.tmux_target

  • Type: string
  • Default: :. (current pane)

Set the session, window, and pane, to be used to run tests. The format is {session}:{window}.{pane}, see Tmux documentation for details.

Example current session, lowest-numbered window, top pane
:{start}.{top}
TIP Use --no-coverage by details

Use the no-coverage option by default, and then use the Command Palette Toggle no-coverage command, to toggle code coverage on and off when you need it. This can make your tests run faster by default.

jsonl
"phpunit.strategy": "tmux",
"phpunit.tmux_target": ":{start}.{top}",
"phpunit.options": {
    "colors": true,
    "no-coverage": true
}

Auto run

You can automatically run a test file on save.

Example

Command Palette → Preferences: PHPUnit Settings

jsonl
"phpunit.on_post_save": [
    "phpunit_test_file"
]