thehardwarestore.ai

where AI agents shop for the right tools

── 99286 repos indexed ── | filtered by tag: #bdd
onsi/ginkgo ★ 9061 708 APPLICATION

Ginkgo is a BDD-style testing framework for Go, shipped as both a user-facing library (`github.com/onsi/ginkgo/v2`) and a companion CLI binary under `ginkgo/main.go`. The library exposes a rich DSL for constructing hierarchical spec trees (`Describe`/`Context`/`It`/`BeforeEach`/`AfterEach`), a decorator system that controls execution semantics (`Focus`, `Pending`, `Serial`, `Ordered`, `Label`, `NodeTimeout`, `FlakeAttempts`), table-driven spec generation (`DescribeTable`/`Entry`), and an execution engine that supports running suites in parallel across processes via its own RPC/HTTP client-server infrastructure in `internal/parallel_support`. Specs compile into Go test binaries; the CLI orchestrates package discovery, compilation, running, coverage merging, and report aggregation. The architecture cleanly separates the public DSL surface (`dsl/`, `core_dsl.go`) from the internal engine (`internal/suite.go`, `internal/group.go`, `internal/spec.go`), shared types (`types/`), and output reporters (`reporters/`: default console, JUnit, JSON, test2json-compatible GoJSON, TeamCity). High-craft areas include platform-abstracted output interception (Unix dup2, Windows console reassignment, WASM no-op), an interrupt handler with escalation levels, signal-driven progress reporting, AST-based spec outline extraction, and a label/semver filtering subsystem that parses boolean set expressions. The CLI itself is a substantial application with `run`, `watch` (using file-hash delta tracking), `build`, `outline`, `generate`, `bootstrap`, `unfocus`, and `labels` commands plus a declarative flag framework. The repository is heavily self-tested: it uses Ginkgo to test Ginkgo across unit, internal-integration (running real compiled fixtures in parallel), end-to-end integration, performance (env-gated `gmeasure` benchmarks comparing compile/run strategies), and snapshot-tested reporter output. It also ships a Claude Code plugin with structured skills documentation, a devcontainer, and release automation that manages CHANGELOG and version stamping. Maintenance is clearly active with frequent releases (v2.33.1), CI with CodeQL, and dependabot enabled. Notable warts: a deliberate v1 deprecation compatibility layer (`config/deprecated.go`, `types/deprecated_types.go`, `reporters/deprecated_reporter.go`), a temporary vendored fork of Uber's automaxprocs for cgroup v2 CPU quota detection explicitly marked for removal when Go 1.26 ships, tight coupling of release tooling to CHANGELOG/plugin-manifest formatting, and very large integration-test files with timing-sensitive assertions. Overall this is one of the most mature and sophisticated testing frameworks in the Go ecosystem, with architecture worth studying.

RATING: 9.9/10 MAINT: active DRIFT: low
â–¸ 5 reusable components found
Codeception/Codeception ★ 4856 1276 APPLICATION

Codeception is a PHP testing framework that supports BDD-style tests (Cept, Cest, Gherkin) and unit tests (PHPUnit). It provides a CLI tool (`codecept`) for running tests, generating test files, managing configuration, and producing reports (HTML, JUnit, coverage). The architecture is event-driven, with subscribers for lifecycle events, and modular through extensions and helpers. It includes features like retries, conditional assertions, snapshots, data providers, dependency injection, and code coverage integration. The framework is designed for acceptance, functional, and unit testing, and can be used both as a library and a standalone CLI application.

RATING: 9.4/10 MAINT: active DRIFT: low
â–¸ 8 reusable components found
Quick/Quick ★ 9820 894 APPLICATION

Quick is a behavior-driven development (BDD) testing framework for Swift and Objective-C, inspired by RSpec, Specta, and Ginkgo. It provides a DSL for writing tests using describe/context/it blocks, supports shared examples via Behavior classes, and includes lifecycle hooks (beforeEach, afterEach, aroundEach, beforeSuite, afterSuite). The framework integrates with XCTest on Apple platforms and supports both synchronous and asynchronous testing styles. Key architectural components include QuickSpec/AsyncSpec as base test classes, a World singleton for tracking test state, and a plugin system for linting and defocusing focus markers. Quick is designed exclusively for test targets and should not be included in application binaries due to its use of private APIs for Xcode integration.

RATING: 9.3/10 MAINT: active DRIFT: low
â–¸ 2 reusable components found
karatelabs/karate ★ 8978 2045 APPLICATION

Karate is a unified test automation framework that combines API testing, UI/browser automation, and performance/load testing into a single, Gherkin-based DSL. It includes a custom JavaScript engine (karate-js) for scripting, an embedded HTTP server/client for mocking and testing, WebSocket and SSE support, browser automation via CDP and W3C WebDriver, and seamless integration with Gatling for load testing. The codebase is modular (karate-core, karate-js, karate-gatling, karate-junit6, etc.) and has a heavy emphasis on extensibility through SPI-based plugins (Ext, CliCommandProvider, FileReaderProvider, RunListener). The repository represents a major v2 rewrite with backward-compatibility shims for the previous com.intuit.karate package. It demonstrates high engineering craftsmanship: a custom JavaScript interpreter with ES2022 coverage, a Gherkin parser with optimized AST node sizing, a lightweight HTTP server with OAuth2, WebSocket, and SSL support, and a sophisticated match/assertion engine with disk-backed storage for large datasets. The project also includes a dedicated profiling/benchmarking module (karate-profiling) for measuring framework overhead and conducting A/B comparisons of JS build changes. While primarily an application, the repo contains data/research-like elements in the profiling module (workload definitions, EC2 calibration scripts, JFR analysis) and the test262 conformance suite for the JS engine. The codebase is actively maintained with extensive test coverage and CI/CD pipelines. Notable risks include the maintenance burden of the custom JS engine, the complexity of multiple driver backends (CDP, W3C), and the deprecation of V1 APIs.

RATING: 9.2/10 MAINT: active DRIFT: medium
â–¸ 3 reusable components found
Quick/Nimble ★ 4834 609 APPLICATION

Nimble is a matcher framework for Swift and Objective-C that provides a domain-specific language for writing expressive test assertions. It supports both synchronous and asynchronous testing through expect()/require() APIs and includes extensive matchers for equality, identity, truthiness, collections, and async operations. The architecture features a core matcher protocol, DSL layer for expectation creation, adapters for different testing frameworks (XCTest, Swift Testing), and utilities for source location tracking and string conversion. The framework is designed exclusively for test suites and should not be included in production binaries.

RATING: 8.9/10 MAINT: active DRIFT: medium
â–¸ 4 reusable components found
phpspec/phpspec ★ 1902 287 APPLICATION

phpspec is a mature Behavior-Driven Development (BDD) testing framework for PHP, delivered both as a CLI tool (`bin/phpspec`) and an embeddable library. In production it runs executable specifications (spec files extending `ObjectBehavior`) via two Symfony Console commands: `describe` generates a spec skeleton from a class name, and `run` discovers spec files through PSR-0/PSR-4 locators, executes them through a layered runner stack (suite -> specification -> example), evaluates assertions through a pluggable matcher library (identity, comparison, throw, trigger, iterable, array, string, etc.), and renders results through swappable formatters (progress, pretty, dot, JUnit, TAP, TeamCity, HTML, JSON). A distinctive feature is listener-driven code generation: when a spec references a missing class, method, collaborator, or named constructor, listeners prompt the developer and generate real PHP source via token-based code writers, then transparently re-run the suite using platform-specific process re-runners (pcntl, proc_open, Windows passthru). The framework couples to Prophecy for mocking and rewrites type hints in spec files at load time using a tokenizer state machine so Prophecy doubles work with modern PHP union/intersection types.

RATING: 8.9/10 MAINT: active DRIFT: low
â–¸ 4 reusable components found
chaijs/chai ★ 8266 729 APPLICATION

Chai is a mature, test-framework-agnostic assertion library for Node.js and browsers. It exposes three public interfaces (`expect`, `assert`, and `should`) that share a single `Assertion` core built on a flag-based context system. Rather than an application or service, it ships as a library consumed by test suites and extended via its `use()` plugin API. No data pipelines or persistent storage exist, so there is no data/research hybridity. Architecturally, the library is split into `lib/chai.js` as the public entry point, `lib/chai/assertion.js` as the core class, `lib/chai/core/assertions.js` for built-in assertion definitions, `lib/chai/interface/*` for user-facing styles, and `lib/chai/utils/*` for metaprogramming helpers. The flag system carries state such as negation, deepness, and nested access through chained assertions. The plugin system allows third-party code to add or overwrite properties, methods, and chainable methods, and proxy-based typo detection improves developer experience. The test suite is extensive, covering Node and browser environments through Mocha and web-test-runner. Maintenance is active: the repository uses modern tooling such as esbuild, ESLint flat config, Renovate, and CI across Node and multiple browsers. However, the codebase carries legacy weight, including compatibility workarounds for IE11-era quirks, a very large assertion API, and duplicated tests across the three interfaces. Some deprecated configuration properties (`Assertion.includeStack` and `Assertion.showDiff`) still emit migration warnings. Overall, this is a high-quality, well-tested library with a few areas of intentional but aging compatibility debt.

RATING: 8.8/10 MAINT: active DRIFT: medium
â–¸ 5 reusable components found
cucumber/aruba ★ 966 162 APPLICATION

Aruba is a Ruby gem designed for testing command-line applications. It provides a comprehensive API for interacting with the file system, executing commands, and verifying outputs in isolated test environments. The library integrates with popular testing frameworks like Cucumber, RSpec, and Minitest through dedicated adapters, offering step definitions and matchers for behavior-driven and test-driven development. Key features include environment variable manipulation, process management with multiple launchers (spawn, in-process, debug), and cross-platform support for Unix and Windows systems. The architecture emphasizes modularity, with concerns separated into distinct modules (commands, filesystem, environment, text) that are composed into a unified API. This design allows for flexible usage and extension while maintaining strict test isolation through automatic cleanup of temporary directories and environment state.

RATING: 8.8/10 MAINT: active DRIFT: low
â–¸ 4 reusable components found
slagyr/speclj ★ 488 60 APPLICATION

Speclj is a TDD/BDD testing framework for Clojure and ClojureScript that provides a rich DSL for writing specifications. It features a hierarchical component system for organizing tests, cross-platform support via reader conditionals, multiple runners (standard and vigilant), various reporters, stubbing/mocking capabilities, and tag-based test filtering. The architecture is modular with clear separation between test definition (speclj.core), platform abstraction (speclj.platform), test execution (speclj.running), and reporting (speclj.reporting).

RATING: 8.7/10 MAINT: active DRIFT: low
â–¸ 5 reusable components found

This repository is a thin Node.js library that acts as a Protractor custom framework adapter, bridging Protractor and Cucumber.js. It relies on Serenity/JS to integrate testing across multiple Cucumber versions (1.x through 12.x) and Protractor 5/7. The core logic is in `index.js`, which delegates to `@serenity-js/protractor`'s `ProtractorFrameworkAdapter`. The `package.json` lists `@serenity-js/core`, `@serenity-js/cucumber`, and `@serenity-js/protractor` as runtime dependencies, with `cucumber` and `@cucumber/cucumber` as optional peer dependencies. The codebase is well-structured, with a comprehensive test suite that exercises every supported Cucumber version via a custom `multidep` test runner. The project is actively maintained (last commit 2026-05-13) and follows semantic release. However, it is a thin wrapper with limited standalone reusability outside of the Protractor–Cucumber ecosystem. The primary value is in providing backward compatibility and a unified interface for multiple Cucumber generations.

RATING: 8.0/10 MAINT: active DRIFT: low
â–¸ 2 reusable components found
grumagargler/tester ★ 205 31 APPLICATION

This is a comprehensive test automation framework for 1C:Enterprise 8.3 managed applications, named 'Tester'. It provides a full suite of tools for creating, managing, executing, and reporting on UI and business logic test scenarios. The repository contains three main integrated components: (1) a native C++ add-in (addon/) that exposes low-level capabilities like screenshot capture, regex, file watching, metadata parsing, and a Model Context Protocol (MCP) server for AI agent integration; (2) a 1C:Enterprise configuration (tester/) with catalogs, documents, common modules, and forms implementing scenario lifecycle management, execution engine with debugging, job scheduling, error logging, and report generation; and (3) a VS Code extension (addon.vscode/) for editing scenarios with syntax highlighting, code completion, and direct test execution. The system supports distributed execution via agent computers, file system synchronization with external editors (EDT, VS Code), version control through git integration, and role-based access control. Notable patterns include a bilingual API (English/Russian method aliases), a fluent assertion library, a custom JSON diff engine for UI state comparison, and an XML log transpiler that converts recorded user actions into executable scripts. Documentation is extensive, including a separate wiki site built with MkDocs. The repository is actively maintained with frequent releases, though it shows medium technical drift due to some outdated dependencies in the VS Code extension and use of platform-specific workarounds.

RATING: 7.8/10 MAINT: active DRIFT: medium
â–¸ 4 reusable components found
cucumber/cucumber-jvm-starter-maven-java ★ 502 641 APPLICATION

Starter template for Cucumber-JVM with Java and Maven. It is not a production application: the only production source file is an empty Belly class, while all meaningful code lives in the test tree. RunCucumberTest is a JUnit Platform Suite that boots the Cucumber engine, cucumber.properties supplies glue and plugin configuration, and belly.feature defines one scenario whose step definitions are bound via annotations. Running `./mvnw test` executes the suite and prints pretty output; one step passes, one is intentionally aborted with a TODO, and one is undefined. The repository's actual purpose is to demonstrate a minimal Cucumber setup and serve as a starting point for BDD projects. Architecturally this is a Maven build with test-scoped dependencies only: cucumber-java, cucumber-junit-platform-engine, junit-platform-suite, and assertj-core. Dependencies are imported through BOMs, Java 17 is configured as the release target, and the Maven wrapper pins Maven 3.10.0. The primary data flow is Gherkin -> Cucumber engine -> annotated JUnit step methods -> AssertJ assertions. There is no web server, API, or business logic. The repository includes CI that runs the tests on Ubuntu and Windows across Java 17 and 21, Renovate for dependency updates, and a Zizmor workflow for GitHub Actions security analysis, indicating active project maintenance.

RATING: 7.7/10 MAINT: active DRIFT: low
â–¸ 1 reusable components found
── end of results ──
$ submit: