Skip to content
A small framework for isolated testing of tmux plugins.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
.travis.yml Initial commit Feb 21, 2015


Build Status

A small framework for isolated testing of tmux plugins. Isolation is achieved by running the tests in Vagrant. Works on travis too.

Extracted from tmux plugin manager and tmux-copycat.

Dependencies: Vagrant (not required when running on travis).


Let's say you made tmux plugin with the following file hierarchy:

|-- plugin.tmux
`-- scripts

From your project root directory (tmux-plugin/) execute the following shell command to fetch tmux-test and add it as a submodule:

$ git submodule add lib/tmux-test

Run the setup script:

$ lib/tmux-test/setup

The project directory will now look like this (additions have comments):

|-- plugin.tmux
|-- run_tests                       # symlink, gitignored
|-- .gitignore                      # 2 lines appended to gitignore
|-- .travis.yml                     # added
|-- lib/tmux-test/                  # git submodule
|-- scripts
|   `--
`-- tests                           # dir to put the tests in
    `--   # symlink, gitignored
    `-- helpers
        `--              # symlinked bash helpers, gitignored

tmux-test is now set up. You are ok to commit the additions to the repo.

Writing and running tests

A test is any executable with a name starting with test_ in tests/ directory.

Now that you installed tmux-test let's create an example test.

  • create a tests/ file with the following content (it's a bash script but it can be any executable):

      #/usr/bin/env bash
      CURRENT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
      # bash helpers provided by 'tmux-test'
      source $CURRENT_DIR/helpers/
      # installs plugin from current repo in Vagrant (or on Travis)
      # start tmux in background (plugin under test is sourced)
      tmux new -d
      # get first session name
      session_name="$(tmux list-sessions -F "#{session_name}")"
      # fail the test if first session name is not "0"
      if [ "$session_name" == "0" ]; then
          # fail_helper is also provided by 'tmux-test'
          fail_helper "First session name is not '0' by default"
      # sets the right script exit code ('tmux-test' helper)
  • make the test file executable with $ chmod +x tests/

  • run the test by executing ./run_tests from the project root directory

  • the first invocation might take some time because Vagrant's ubuntu virtual machine is downloading. You should see Success, tests pass! message when it's done.

Check out more example test scripts in this project's tests/ directory.

Continuous integration

The setup script (lib/tmux-test/setup) added a .travis.yml file to the project root. To setup continuous integration, just add/enable the project on travis.


  • The tests/ directory for tests and lib/tmux-test/ for cloning tmux-test into cannot be changed currently
  • Don't run tests/run_tests_in_isolation script on your local development environment. That's an internal test runner meant to be executed in an isolated environment like vagrant or travis.
    Use ./run_tests script.
  • You can use KEEP_RUNNING=true ./run_tests for faster test running cycle. If this case Vagrant will keep running even after the tests are done.
  • You can use VAGRANT_CWD=lib/tmux-test/ vagrant ssh ubuntu for ssh login to Vagrant.

Running tmux-test framework tests

tmux-test uses itself to test itself. To run framework tests:

  • clone this project $ git clone
  • $ cd tmux-test
  • run $ ./run_framework_tests

Other goodies

  • tmux-copycat - a plugin for regex searches in tmux and fast match selection
  • tmux-continuum - automatic restoring and continuous saving of tmux env



You can’t perform that action at this time.