3个版本
0.1.2 | 2020年6月28日 |
---|---|
0.1.1 | 2020年6月27日 |
0.1.0 | 2020年6月27日 |
#2683 in 数据库接口
54KB
1K SLoC
testfixtures
testfixtures是一个Rust库,用于从yaml文件中准备测试数据。
安装
此crate与async-std和tokio运行时兼容。
async-std
[dependencies]
testfixtures = "0.1"
sqlx = "0.3"
chrono = "0.4.11"
tokio
[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"
使用
创建如下所示的固定文件。
todos.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
点击查看日期时间格式示例
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
如果您需要编写原始SQL,可能用于调用函数,请将列的值前缀为RAW=。
- id: 1
description: fizz
done: true
progress: 10.5
created_at: RAW=NOW()
您的测试将如下所示。
#[cfg(test)]
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
loader.load().await.unwrap();
// run your tests
Ok(())
}
}
PgLoader 和 SqliteLoader 正在开发中。
选项
database(必需)
database是传递db连接池到Loader的选项。
let pool = MySqlPool::new(&env::var("DATABASE_URL")?).await?;
let loader = MySqlLoader::new(|cfg| {
cfg.database(pool);
// ...
})
.await?;
location(必需)
location是设置时区的选项。
use chrono::Utc;
let loader = MySqlLoader::new(|cfg| {
cfg.location(Utc);
// or cfg.location(Local);
// ...
})
.await?;
skip_test_database_check(可选)
skip_test_database_check是设置检查数据库名是否以"test"结尾的标志的选项。
let loader = MySqlLoader::new(|cfg| {
cfg.skip_test_database_check();
// ...
})
.await?;
files(可选)
files是读取您的固定文件的选项。
let loader = MySqlLoader::new(|cfg| {
cfg.files(vec!["fizz.yml"]);
// ...
})
.await?;
directory(可选)
files是在目录中读取您的固定文件的选项。
let loader = MySqlLoader::new(|cfg| {
cfg.directory("fixture");
// ...
})
.await?;
paths(可选)
paths是files选项和directory选项的组合。
let loader = MySqlLoader::new(|cfg| {
cfg.paths(vec!["fizz", "buzz/todos.yml"]);
// ...
})
.await?;
实现状态
数据库
- MySQL和MariaDB
- Postgres
- SQLite
选项
- database
- 加载文件
- skip_test_database_check
- location
- directory
- paths
- template
贡献
# setup test db
$ make db
# load environment variables
$ make env
$ direnv allow # https://github.com/direnv/direnv
# run unit tests
$ make test
参考
依赖关系
~14–32MB
~457K SLoC