This crate is compatible with the async-std and tokio runtimes.
async-std
toml
[dependencies]
testfixtures = "0.1"
sqlx = "0.3"
chrono = "0.4.11"
tokio
toml
[dependencies]
testfixtures = { version = "0.1", default-features = false, features = [ "runtime-tokio" ] }
sqlx = { version = "0.3", default-features = false, features = [ "runtime-tokio", "macros" ] }
chrono = "0.4.11"
Create fixture files like the following.
todos.yml
yml
- id: 1
description: buy a new camera
done: true
progress: 10.5
created_at: 2020/01/01 01:01:01
- id: 2
description: meeting
done: false
progress: 30.0
created_at: 2020/01/01 02:02:02
Click and see the datetime format example
rust
2020-01-01 01:01
2020-01-01 01:01:01
20200101 01:01
20200101 01:01:01
01012020 01:01
01012020 01:01:01
2020/01/01 01:01
2020/01/01 01:01:01
If you need to write raw SQL, probably to call a function, prefix the value of the column with RAW=.
yml
- id: 1
description: fizz
done: true
progress: 10.5
created_at: RAW=NOW()
Your tests would look like this.
```rust
mod tests { use chrono::Utc; use sqlx::MySqlPool; use std::env; use testfixtures::MySqlLoader;
#[async_std::test]
async fn test_something() -> anyhow::Result<()> {
let pool = MySqlPool::new(&env::var("DATABASE_URL")?).await?;
let loader = MySqlLoader::new(|cfg| {
cfg.location(Utc);
cfg.database(pool);
cfg.skip_test_database_check();
cfg.paths(vec!["fixtures/todos.yml"]);
})
.await?;
// load your fixtures
if let Err(err) = loader.load().await {
panic!("{}", err)
}
// run your tests
Ok(())
}
}
```
PgLoader and SqliteLoader are under development.
database is a option for passing db connection pool to a Loader.
rust
let pool = MySqlPool::new(&env::var("DATABASE_URL")?).await?;
let loader = MySqlLoader::new(|cfg| {
cfg.database(pool);
// ...
})
.await?;
location is a option for setting timezone.
```rust use chrono::Utc;
let loader = MySqlLoader::new(|cfg| { cfg.location(Utc); // or cfg.location(Local); // ... }) .await?; ```
skiptestdatabase_check is a option for setting a flag for checking if database name ends with "test".
rust
let loader = MySqlLoader::new(|cfg| {
cfg.skip_test_database_check();
// ...
})
.await?;
files is a option for reading your fixture files.
rust
let loader = MySqlLoader::new(|cfg| {
cfg.files(vec!["fizz.yml"]);
// ...
})
.await?;
files is a option for reading your fixture files in a directory.
rust
let loader = MySqlLoader::new(|cfg| {
cfg.directory("fixture");
// ...
})
.await?;
paths is a option that is a combination of files option and directory option.
rust
let loader = MySqlLoader::new(|cfg| {
cfg.paths(vec!["fizz", "buzz/todos.yml"]);
// ...
})
.await?;
```sh
$ make db
$ make env $ direnv allow # https://github.com/direnv/direnv
$ make test ```
https://github.com/go-testfixtures/testfixtures