Automatically Run Tests on File Changes with entr for Faster Feedback Loops

User avatar placeholder
Written by Tamzid Ahmed

June 1, 2026

Automatically running tests on file changes is a game-changer for developer productivity. Tools like entr eliminate manual test execution, providing instant feedback as you code. This guide shows how to set up entr for faster feedback loops and more efficient workflows.

What is entr and Why It’s Perfect for Test Automation

entr is a lightweight Unix command-line utility that watches files and executes commands when they change. Unlike heavier tools like nodemon or inotifywait, entr focuses on simplicity and reliability. It’s designed to integrate seamlessly with existing build and test pipelines, making it ideal for developers who want minimal overhead in their workflow.

For testing, entr shines by automatically re-running your test suite whenever source files are modified. This eliminates the delay between writing code and seeing results, reducing context switching and keeping you in the flow state. Studies show that faster feedback loops can improve productivity by up to 30% (source: Atlassian).

Setting Up entr for Automated Testing

Installing entr is straightforward across platforms. Here’s how to get started:

  1. Install entr via Homebrew on macOS: brew install entr
  2. On Linux, use your package manager (e.g., sudo apt install entr for Debian-based systems)
  3. Verify installation with entr --version

Once installed, use entr to monitor files and trigger tests. The core syntax pipes file paths to entr, which then runs a command on changes:

find . -name '*.js' | entr -r npm test

This command watches all JavaScript files in the current directory and re-runs npm test whenever they change. The -r flag ensures the test process restarts cleanly after each run, avoiding lingering processes.

Practical Example: Running Jest Tests Automatically

For JavaScript projects using Jest, a common setup is to watch only test files and their dependencies:

  1. First, locate all relevant files: find src -name '*.test.js' -o -name '*.js'
  2. Pipe to entr: find src -name '*.test.js' -o -name '*.js' | entr -r jest --runInBand

This approach ensures tests run immediately after any file change, with --runInBand preventing parallel test execution issues in some environments.

Key Advantages Over Manual Testing

Manual test execution creates friction in the development cycle. With entr, you gain:

  • Instant feedback: Fix errors before moving to the next task
  • Reduced context switching: Stay focused on coding without leaving the terminal
  • Consistent environment: Avoid “works on my machine” issues by running tests in the same setup every time
  • Lightweight performance: Minimal resource usage compared to IDE-based watchers

These benefits compound over time. A developer running tests 20 times daily could save 10+ minutes per day by automating with entr.

Practical Tradeoffs and When to Use entr

While entr is powerful, consider these tradeoffs:

  • It doesn’t natively support directory recursion (use find or fd instead)
  • Requires manual configuration for complex watch patterns
  • Less feature-rich than IDE-specific tools for GUI-based workflows

Use entr when you need a terminal-native solution that works across projects and environments. For IDE-focused workflows, tools like VS Code extensions might be better suited.

Best Practices for Maximizing Feedback Speed

To get the most out of entr:

  • Target specific files: Watch only changed files instead of entire directories
  • Combine with fd for faster file searching: fd -e js | entr -r npm test
  • Use -d to watch directories recursively (requires entr v4.5+)
  • Integrate with fzf for interactive file selection: fd -t f | fzf | entr -r npm test

These optimizations ensure tests run only when necessary, avoiding unnecessary overhead.

Conclusion

Automating test execution with entr transforms your feedback loop from a bottleneck into a seamless part of the coding process. By eliminating manual test runs, you save time, reduce errors, and maintain focus. Start small: configure entr to watch your core test files and integrate it into your daily workflow. As you see the benefits, expand to more complex setups. Remember, faster feedback isn’t just about speed—it’s about creating a smoother, more enjoyable development experience.

Leave a Comment