Crates.io | dir-test |
lib.rs | dir-test |
version | |
source | src |
created_at | 2023-02-04 23:17:39.199486 |
updated_at | 2024-12-04 17:20:46.372547 |
description | Provides a macro to generate tests from files in a directory |
homepage | |
repository | https://github.com/fe-lang/dir-test |
max_upload_size | |
id | 776700 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
dir-test
provides a macro to generate single test cases from files in a directory.
Add the following dependency to your Cargo.toml
.
[dev-dependencies]
dir-test = "0.4"
use dir_test::{dir_test, Fixture};
#[dir_test(
dir: "$CARGO_MANIFEST_DIR/fixtures",
glob: "**/*.txt",
)]
fn mytest(fixture: Fixture<&str>) {
// The file content and the absolute path of the file are available as follows.
let content = fixture.content();
let path = fixture.path();
// Write your test code here.
// ...
}
Assuming your crate is as follows, then the above code generates two test
cases mytest__foo()
and mytest__fixtures_a_bar()
.
my-crate/
├─ fixtures/
│ ├─ foo.txt
│ ├─ fixtures_a/
│ │ ├─ bar.txt
├─ src/
│ ├─ ...
│ ├─ lib.rs
├─ Cargo.toml
├─ README.md
🔽
#[test]
fn mytest__foo() {
mytest(fixture);
}
#[test]
fn mytest__fixtures_a_bar() {
mytest(fixture);
}
NOTE: The dir
argument must be specified in an absolute path because
of the limitation of the current procedural macro system. Consider using
environment variables, dir-test
crate resolves environment variables
internally.
You can specify a custom loader function to load the file content from the
file path. The loader will be passed &'static str
file path and can return
an arbitrary type.
use dir_test::{dir_test, Fixture};
#[dir_test(
dir: "$CARGO_MANIFEST_DIR/fixtures",
glob: "**/*.txt",
loader: std::fs::read_to_string,
)]
fn test(fixture: Fixture<std::io::Result<String>>) {
let content = fixture.content().unwrap();
// ...
}
If the loader function is not specified, the default content type is
&'static str
.
Test names can be customized by specifying the postfix
argument.
postfix
is appended to the test name.
use dir_test::{dir_test, Fixture};
#[dir_test(
dir: "$CARGO_MANIFEST_DIR/fixtures",
glob: "**/*.txt",
postfix: "custom", // `_custom` is appended to the test name.
)]
fn test(fixture: Fixture<std::io::Result<String>>) {
// ...
}
Test attributes can specified by the dir_test_attr
attribute. The
attributes inside dir_test_atrr
are applied to the all generated test.
use dir_test::{dir_test, Fixture};
#[dir_test(
dir: "$CARGO_MANIFEST_DIR/fixtures",
glob: "**/*.txt",
)]
#[dir_test_attr(
#[wasm_bindgen_test]
#[cfg(target_family = "wasm")]
)]
fn wasm_test(fixture: Fixture<std::io::Result<String>>) {
// ...
}
NOTE: The dir_test_attr
attribute must be specified after the
dir_test
.
Tests may have a return type, allowing for the [Result<T, E>
] type to be used in the test.
See the relevant book link here.
use dir_test::{dir_test, Fixture};
#[dir_test(
dir: "$CARGO_MANIFEST_DIR/fixtures",
glob: "**/*.txt",
)]
fn test(fixture: Fixture<&str>) -> std::io::Result<()> {
// ...
}