Noir Testing
Noir has a built-in test framework that runs alongside your circuit code using nargo test. Tests are constrained by default, meaning they generate real constraints and verify circuit behavior under proving conditions.
Key Facts
- Tests live in the same
.nrfiles as circuit code, or in separate test modules - Tests are constrained by default -- they generate real constraints just like proving
- Add
unconstrainedto run tests without constraint generation (faster, but less thorough) - No external test framework needed -- everything is built into
nargo
Running Tests
# Run all tests in the project
nargo test
# Run a specific test by exact name
nargo test --exact test_addition
# Run tests matching a prefix
nargo test test_transfer
# Show println output during tests
nargo test --show-output
Quick Start
fn add(x: Field, y: Field) -> Field {
x + y
}
#[test]
fn test_add() {
assert_eq(add(2, 3), 5);
}
#[test(should_fail_with = "attempt to divide by zero")]
fn test_divide_by_zero() {
let _ = 1 / 0;
}
#[test]
unconstrained fn test_add_unconstrained() {
// Runs faster without constraint generation
assert_eq(add(2, 3), 5);
}
Detailed Guides
- Test Attributes --
#[test],should_fail, constrained vs unconstrained - Assertion Patterns --
assert,assert_eq, debugging withprintln - Test Organization -- Modules, file structure, helpers, best practices
