Assertion
Mantis provides an expressive testing utility that makes it easy to write clear and maintainable tests.
Basic Assertions
The expect
function allows you to write assertions in a natural, fluent style:
import khalyomede.mantis.test { expect }
fn test_basic_assertions() {
// Equality
expect(1).to_be_equal_to(1)
// Inequality
expect(1).to_be_different_than(2)
// Boolean assertions
expect(true).to_be_true()
expect(false).to_be_false()
}
Running tests
Run this command to run all assertions:
v test .
To run tests from a specific file:
v test tests/controllers/posts/store_test.v
Tips for good tests
Here are some tips for writing effective tests with Mantis's testing utilities:
- Use descriptive test function names that explain the behavior being tested
- Keep tests focused on a single piece of functionality
- Follow the Arrange-Act-Assert pattern
- Use meaningful assertion messages
Example of a well-structured test:
import khalyomede.mantis.html { create_app, App, Response, Request }
import khalyomede.mantis.html.response
import khalyomede.mantis.html.route
import khalyomede.mantis.test { expect }
fn test_home_page_displays_hello_world() {
// 1. Arrange
app := create_app(
routes: [
route.get(name: "index", path: "/", callback: fn (app App) Response {
return response.html(content: "hello world")
})
],
request: Request{
path: "/"
method: .get
}
)
// 2. Act
res := app.render()
// 3. Assert
expect(res.content).to_be_equal_to("hello world")
}
Available assertions
- to_be_equal_to
- to_be_different_than
- to_be_between
- to_be_greater_than
- to_be_greater_or_equal_to
- to_be_lower_than
- to_be_lower_or_equal_to
- to_be_true
- to_be_false
- to_end_with
- to_not_end_with
- to_be_snake_case
- to_not_be_snake_case
- to_be_kebab_case
- to_not_be_kebab_case
- to_have_key_equal_to
- to_contain
to_be_equal_to
Asserts that a value equals another value. Works with basic types like numbers, strings, and booleans.
mantis.test { expect }
fn test_equality() {
expect(42).to_be_equal_to(42)
expect("hello").to_be_equal_to("hello")
expect(true).to_be_equal_to(true)
}
to_be_different_than
Asserts that a value is different than another value.
mantis.test { expect }
fn test_inequality() {
expect(42).to_be_different_than(24)
expect("hello").to_be_different_than("world")
expect(true).to_be_different_than(false)
}
to_be_between
Asserts that a number falls between two other numbers (inclusive).
mantis.test { expect }
fn test_between() {
expect(5).to_be_between(0, 10)
expect(0).to_be_between(0, 10) // Inclusive lower bound
expect(10).to_be_between(0, 10) // Inclusive upper bound
}
to_be_greater_than
Asserts that a number is greater than another number.
mantis.test { expect }
fn test_greater_than() {
expect(42).to_be_greater_than(41)
expect(0).to_be_greater_than(-1)
}
to_be_greater_or_equal_to
Asserts that a number is greater than or equal to another number.
mantis.test { expect }
fn test_greater_or_equal() {
expect(42).to_be_greater_or_equal_to(42)
expect(42).to_be_greater_or_equal_to(41)
}
to_be_lower_than
Asserts that a number is lower than another number.
mantis.test { expect }
fn test_lower_than() {
expect(41).to_be_lower_than(42)
expect(-1).to_be_lower_than(0)
}
to_be_lower_or_equal_to
Asserts that a number is lower than or equal to another number.
mantis.test { expect }
fn test_lower_or_equal() {
expect(42).to_be_lower_or_equal_to(42)
expect(41).to_be_lower_or_equal_to(42)
}
to_be_true
Asserts that a boolean value is true.
mantis.test { expect }
fn test_is_true() {
has_permission := true
expect(has_permission).to_be_true()
}
to_be_false
Asserts that a boolean value is false.
mantis.test { expect }
fn test_is_false() {
is_deleted := false
expect(is_deleted).to_be_false()
}
to_end_with
Asserts that a string ends with a given suffix.
mantis.test { expect }
fn test_string_ending() {
expect("hello world").to_end_with("world")
expect("test.txt").to_end_with(".txt")
}
to_not_end_with
Asserts that a string does not end with a given suffix.
mantis.test { expect }
fn test_string_not_ending() {
expect("hello world").to_not_end_with("hello")
expect("test.txt").to_not_end_with(".pdf")
}
to_be_snake_case
Asserts that a string follows snake_case convention.
mantis.test { expect }
fn test_snake_case() {
expect("user_name").to_be_snake_case()
expect("first_last_name").to_be_snake_case()
}
to_not_be_snake_case
Asserts that a string does not follow snake_case convention.
mantis.test { expect }
fn test_not_snake_case() {
expect("userName").to_not_be_snake_case()
expect("FirstLastName").to_not_be_snake_case()
}
to_be_kebab_case
Asserts that a string follows kebab-case convention.
mantis.test { expect }
fn test_kebab_case() {
expect("user-name").to_be_kebab_case()
expect("first-last-name").to_be_kebab_case()
}
to_not_be_kebab_case
Asserts that a string does not follow kebab-case convention.
mantis.test { expect }
fn test_not_kebab_case() {
expect("userName").to_not_be_kebab_case()
expect("first_last_name").to_not_be_kebab_case()
}
to_have_key_equal_to
Asserts that a map contains a specific key with an expected value.
mantis.test { expect }
fn test_map_key_value() {
user := {
"name": "John"
"age": "30"
}
expect(user).to_have_key_equal_to("name", "John")
}
to_contain
Asserts that an array contains a specific element.
mantis.test { expect }
fn test_array_contains() {
fruits := ["apple", "banana", "orange"]
expect(fruits).to_contain("banana")
}