10 个稳定版本 (5 个主要版本)
6.1.0 | 2024年5月13日 |
---|---|
6.0.0 | 2024年3月23日 |
5.0.0 | 2023年8月13日 |
4.1.0 | 2023年5月12日 |
1.1.0 | 2022年10月30日 |
#201 在 数据库接口
每月下载量 104
29KB
460 行
一个用于测试 Sea Orm 迁移器的库。用于检查在调用 up
和 down
时,它们是否在两个方向上工作。
它一次运行一个迁移的上和下。检查它对数据库所做的差异。检查逆向操作是否将数据库恢复到先前状态。
支持 Postgres 和 SQLite 迁移。
示例
最常见的情况是简单地测试您的 Migrator
是否可逆。在测试中,如果不可逆则引发错误。
为此,将以下测试添加到您的迁移项目中...
assert-migrator-reversible = "1"
#[cfg(test)]
mod test_migrator {
use crate::path::to::my::Migrator;
use ::assert_migrator_reversible::assert_migrator_reversible;
#[test]
fn it_should_have_reversible_migrations() {
assert_migrator_reversible(Migrator, None);
}
}
此测试将默认使用 SQLite(这就是为什么传递 None
)的原因。
使用 tokio::test
的示例
如果您已经在使用 Tokio 测试您的项目,那么以下可能更好。
assert-migrator-reversible = { version = "1", default-features = false }
#[cfg(test)]
mod test_migrator {
use crate::path::to::my::Migrator;
use ::assert_migrator_reversible::assert_migrator_reversible_async;
#[tokio::test]
async fn it_should_have_reversible_migrations() {
assert_migrator_reversible_async(Migrator, None).await
}
}
(同样,此示例将使用 SQLite,因为它传递了 None
)。
使用 PostgreSQL 的示例
测试 PostgreSQL 需要传递数据库的 URL。它不会默认从环境变量中获取。您必须指定它。
#[cfg(test)]
mod test_migrator {
use crate::path::to::my::Migrator;
use ::assert_migrator_reversible::assert_migrator_reversible;
use ::assert_migrator_reversible::DbConnection;
const POSTGRES_DB_URL : &'static str = &"postgres://user:password@localhost:5432/my_database";
#[test]
fn it_should_have_reversible_migrations() {
let db_conn = Some(DbConnection::Url(POSTGRES_DB_URL));
assert_migrator_reversible(Migrator, db_conn);
}
}
使用自己的 DatabaseConnection
您还可以构建自己的 Sea Orm DatabaseConnection
对象并将其传递以供使用...
#[cfg(test)]
mod test_migrator {
use crate::path::to::my::Migrator;
use ::assert_migrator_reversible::assert_migrator_reversible;
use ::assert_migrator_reversible::DbConnection;
use ::sea_orm_migration::sea_orm::Database;
use ::sea_orm_migration::sea_orm::DatabaseConnection;
const POSTGRES_DB_URL : &'static str = &"postgres://user:password@localhost:5432/my_database";
#[tokio::test]
async fn it_should_have_reversible_migrations() {
let db_connection = Database::connect(db_url)
.await
.expect("expect DatabaseConnection to be created");
let db_conn = Some(DbConnection::DatabaseConnection(db_connection));
assert_migrator_reversible_async(Migrator, db_conn).await
}
}
注意事项
- 此工具仅检查数据库表结构更改。它不会查找其他更改,例如数据、枚举、索引、SQL 函数等。
- 默认选项是使用内存中的 SQLite 数据库;这相当有限,因为许多功能不受支持。
- 测试 PostgreSQL 需要启动自己的 PostgreSQL 服务器。此库不会为您执行此操作。
- 它不支持 MySQL(也许将来会支持)。
API
该库提供两个非异步函数。这些函数通过捆绑 Tokio 来为您处理异步部分。
assert_migrator_reversible
- 测试您的迁移器是否可逆的主要方式。传递一个迁移器。它将运行它上下。如果不可逆,它将引发恐慌。find_index_of_non_reversible_migration
- 这与assert_migrator_reversible
非常相似。它会找到一个不可逆的迁移。找到后,它会返回索引。它不会崩溃。
这些函数的异步版本也是可用的。如果您不想引入 Tokio(因为它相当庞大),这将非常有用。相反,自己处理。
功能
tokio
默认 - 这增加了 Tokio 支持。这启用了assert_migrator_reversible
和find_index_of_non_reversible_migration
函数。这使得测试更加简单。如果您已经在测试中使用 Tokio,并希望减小这个依赖项,您可能想要禁用此功能。runtime-actix-native-tls
- 将 Sea-Orm 迁移设置为使用此运行时。runtime-actix-rustls
- 将 Sea-Orm 迁移设置为使用此运行时。runtime-async-std-native-tls
- 将 Sea-Orm 迁移设置为使用此运行时。runtime-async-std-rustls
- 将 Sea-Orm 迁移设置为使用此运行时。runtime-tokio-native-tls
默认 - 将 Sea-Orm 迁移设置为使用此运行时。runtime-tokio-rustls
- 将 Sea-Orm 迁移设置为使用此运行时。
本地开发
要运行此项目的测试,您需要安装 Docker,并首先启动 Postgres Docker 镜像。
运行测试的确切步骤是 ...
./scripts/start-postgres.sh
cargo test
./scripts/stop-postgres.sh
依赖项
~55MB
~1M SLoC