Skip to main content

Testing

A comprehensive testing guide for the CoW Protocol smart contracts project, covering test execution, debugging, gas reporting, and code coverage analysis.

Test Framework

Tests leverage:
  • Hardhat - Development environment
  • Waffle - Smart contract testing library
  • Chai - Assertion library
  • ethers.js - Ethereum interaction library

Running Tests

Standard Suite

Run the complete test battery:
yarn test

Excluded Tests

Execute tests that skip coverage analysis:
yarn test:ignored-in-coverage

Coverage Reports

Generate detailed instrumentation metrics:
yarn coverage

Debugging

Enable verbose output to track contract deployments, transaction details, state changes, and event emissions:
DEBUG=* yarn test

Gas Reporting

Activate gas tracking to produce consumption tables showing costs per operation and deployment expenses:
REPORT_GAS=1 yarn test

Coverage Analysis

The yarn coverage command instruments contracts and generates:
  • Terminal summary with coverage percentages
  • Interactive HTML report at coverage/index.html

Coverage Color Coding

ColorMeaning
RedUncovered lines
YellowPartial coverage
GreenFully covered
Coverage instrumentation alters bytecode, making it unsuitable for gas benchmarking. Do not use coverage reports for gas analysis.

Configuration

The MOCHA_CONF environment variable controls test scope across different execution contexts:
MOCHA_CONF=custom yarn test

Troubleshooting

IssueSolution
Test failures after contract changesRebuild with yarn build:sol
Cached state issuesClear Hardhat cache: rm -rf cache/
Memory errors during coverageIncrease heap: NODE_OPTIONS="--max-old-space-size=4096" yarn coverage
Last modified on March 4, 2026