Git Product home page Git Product logo

bats-docs's Introduction

Overview

This is a proposal describing how a Bats helper library should look and behave. These guidelines and the libraries following them resulted from the discussion about introducing a Standard Library of Test Helpers for Bats.

Topics:

Libraries:

Installation

There are multiple supported installation methods. One may be better than the others depending on your case. Make sure to install the required dependencies as well (e.g. install bats-support when installing bats-assert).

npm

If your project is managed by npm, the recommended installation method is also via npm.

$ npm install --save-dev https://github.com/ztombol/bats-support
$ npm install --save-dev https://github.com/ztombol/bats-assert

Homebrew

OS X users can use Homebrew to install libraries system-wide (see note below for alternatives).

The forumlae are in a tap for various shell utilities by @kaos, so enable the tap kaos/shell first.

$ brew tap kaos/shell

Then install the desired libraries.

$ brew install bats-assert
$ brew install bats-file

Note: The required dependencies, bats-support as well as bats from the core tap will be installed automatically for you, with any of the two previous commands.

Note: Homebrew installs packages in a system-wide /usr/local prefix by default. This is encouraged praxis when using brew, but optional. See Alternative Installs from the Homebrew documentation for details.

Git submodule

If your project uses Git, the recommended method of installation is via a submodule.

Note: The following example installs libraries in the ./test/test_helper directory.

$ git submodule add https://github.com/ztombol/bats-support test/test_helper/bats-support
$ git commit -m 'Add bats-support library'

Git clone

If you do not use Git for version control, simply clone the repository.

Note: The following example installs libraries in the ./test/test_helper directory.

$ git clone https://github.com/ztombol/bats-support test/test_helper/bats-support

Loading

A library is loaded by sourcing the load.bash file in its main directory.

Assuming that libraries are installed in test/test_helper, adding the following line to a file in the test directory loads the bats-support library.

load 'test_helper/bats-support/load'

For npm installations, load the libraries from node_modules:

load '../node_modules/bats-support/load'
load '../node_modules/bats-assert/load'

For brew installations, load the libraries from $(brew --prefix)/lib/ (the brew prefix is /usr/local by default):

TEST_BREW_PREFIX="$(brew --prefix)"
load "${TEST_BREW_PREFIX}/lib/bats-support/load.bash"
load "${TEST_BREW_PREFIX}/lib/bats-assert/load.bash"

Note: The load function sources a file (with .bash extension automatically appended) relative to the location of the current test file.

Note: The load function does NOT append a .bash extension automatically when loading a file using an absolute path.

If a library depends on other libraries, they must be loaded as well.

Simple loading helper

You can create a shorthand to simplify library loading.

# Load a library from the `${BATS_TEST_DIRNAME}/test_helper' directory.
#
# Globals:
#   none
# Arguments:
#   $1 - name of library to load
# Returns:
#   0 - on success
#   1 - otherwise
load_lib() {
  local name="$1"
  load "test_helper/${name}/load"
}

This function lets you load a library with only its name, instead of having to type the entire installation path.

load_lib bats-support
load_lib bats-assert

Testing

A library's test suite is located in its test subdirectory. Library dependencies are loaded from $TEST_DEPS_DIR, which defaults to the directory containing the library.

For example, testing the bats-assert library requires the bats-support to be present in the same directory by default.

$ tree -L 1
.
├── bats-assert
└── bats-support

2 directories, 0 files
$ bats bats-assert/test

This simplifies testing in most cases, e.g. testing in development and before running the project's test suite, but also allows easily selecting dependencies, e.g. testing compatibility with different versions.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.