DEV Community

Cover image for Introducing Shest: A Test Runner for Bash Scripts
aagamezl
aagamezl

Posted on

2

Introducing Shest: A Test Runner for Bash Scripts

Shest: A Test Runner for Bash Scripts

Shest is an intuitive test runner for Bash scripts, inspired by Node.js Jest. The name Shest stands for [Sh]ell T[est], and it simplifies testing by providing a clear structure for writing, organizing, and executing shell script tests. With built-in support for assertions, Shest empowers developers to write reliable and maintainable Bash scripts effortlessly.

πŸš€ Installation

You can install shest using a single command. The installation script checks if shest is already installed, downloads the latest version if not, and sets it up for global use.

Installation Command:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/aagamezl/shest/master/tools/install.sh)"
Enter fullscreen mode Exit fullscreen mode

What the Command Does:

  1. Checks if shest Exists:

    • Verifies if shest is already present in /home/$USER.
    • Skips installation if already installed.
  2. Downloads the Script:

    • Fetches the latest version from the GitHub repository using curl.
  3. Places the Script in /home/$USER:

    • Saves the script to /home/$USER/shest.sh for global access.
  4. Displays Installation Status:

    • Notifies whether the installation was successful or failed.

πŸ›  Usage

To use shest in your shell scripts, include it using the source command. Here’s an example test suite:

#!/bin/bash

# Include the shest framework
source /home/$USER/shest.sh

# Define a test suite
describe "Example Test Suite" <<'TEST'
  test "Simple equality check" <<'SUITE'
    toBeEqual "1 + 1 equals 2" "$(echo $((1 + 1)))" "2"
  SUITE

  test "String contains check" <<'SUITE'
    toContain "Check substring" "Hello, World!" "World"
  SUITE
TEST

# Run the tests
pluralize_test
Enter fullscreen mode Exit fullscreen mode

πŸ” Syntax Overview

Shest’s syntax is designed to be intuitive:

  1. describe Block: Groups related test cases.
  2. test Block: Defines individual test cases.
  3. Assertions: Built-in functions like toBeEqual, toBeNotEqual, toBeTrue, toBeFalse, and toContain to validate outcomes.
  4. Heredoc Syntax: Encapsulates multi-line strings without interpreting variables or special characters.

Example:

describe "Nouns ending in -ss, -sh, -ch, -x, -o" <<'TEST'
  test "Testing toBeEqual" <<'SUITE'
    toBeEqual "hello" "hello"
    toBeEqual 1 1
  SUITE

  test "Testing toBeNotEqual" <<'SUITE'
    toBeNotEqual "hello" "world"
  SUITE

  test "Testing toBeTrue" <<'SUITE'
    toBeTrue true
  SUITE

  test "Testing toBeFalse" <<'SUITE'
    toBeFalse false
  SUITE

  test "Testing toContain" <<'SUITE'
    toContain "hello world" "world"
    toContain 123 2
  SUITE
TEST
Enter fullscreen mode Exit fullscreen mode

πŸ“Š Test Results

Shest provides a detailed report for each test run:

  • Pass/Fail Marks: Tests are marked as βœ“ (Pass) or βœ— (Fail).
  • Summary: Shows the total number of test suites and individual tests that passed/failed.
  • Time Taken: Displays execution time for all tests.

Example:

β€’ Testing Assertions
  Testing toBeEqual
    βœ“ toBeEqual: Passed
    βœ“ toBeEqual: Passed

  Testing toBeNotEqual
    βœ“ toBeNotEqual: Passed

  Testing toBeTrue
    βœ“ toBeTrue: Passed

  Testing toBeFalse
    βœ“ toBeFalse: Passed

  Testing toContain
    βœ“ toContain: Passed
    βœ“ toContain: Passed

Test Suites:    0 failed, 5 passed, 5 total
Tests:          0 failed, 7 passed, 7 total
Time:           0.01 s
Enter fullscreen mode Exit fullscreen mode

🌟 Why Use Shest?

  • Intuitive Syntax: Simplifies writing and organizing Bash script tests.
  • Comprehensive Assertions: Offers built-in functions to validate various conditions.
  • Improved Productivity: Saves time by identifying issues early.

Start testing your Bash scripts with Shest today and experience the simplicity of reliable shell scripting! πŸš€


Explore Shest on GitHub for more details.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (2)

Collapse
 
d-x profile image
dx β€’

Another tool to run tests in Bash: github.com/kward/shunit2

Collapse
 
aagamezl profile image
aagamezl β€’

Thanks for the comment, yes, I saw the library while developing my library, have some good features.

I'm planning to add before, beforeEach, after, afterEach, and a better test report. Also, if I can, the line number where an error occurs, but this last is a big maybe.

@d-x can you please try my library and give me some feedback, I would appreciate it.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

πŸ‘‹ Kindness is contagious

Explore a sea of insights with this enlightening post, highly esteemed within the nurturing DEV Community. Coders of all stripes are invited to participate and contribute to our shared knowledge.

Expressing gratitude with a simple "thank you" can make a big impact. Leave your thanks in the comments!

On DEV, exchanging ideas smooths our way and strengthens our community bonds. Found this useful? A quick note of thanks to the author can mean a lot.

Okay