#postgresql #docker #testing

kpostgres_fixture

为设置临时数据库或临时PostgreSQL实例,并在隔离环境中运行测试代码的固定装置

2个不稳定版本

0.2.0 2019年7月31日
0.1.0 2019年7月31日

#2293数据库接口

MIT 许可证

14KB
194

kpostgres_fixture

docs.rs

这提供了两个主要功能

  • with_temporary_postgres:使用docker创建一个临时的PostgreSQL实例。
  • with_temporary_database:在现有的PostgreSQL实例中创建一个临时的数据库。

它们都传递参数和TlsMode,以便您可以以任何您想要的方式创建连接。

这对于在隔离环境中运行测试数据库中的迁移等操作非常有用。

使用示例最佳实例直接取自我的测试

#[cfg(test)]
mod tests {
    use super::*;

    use std::sync::{Once, ONCE_INIT};

    static INIT: Once = ONCE_INIT;

    #[cfg(feature = "docker")]
    #[test]
    fn temp_pg() {
        INIT.call_once(|| {
            env_logger::init();
        });

        let result = with_temporary_postgres("postgres:11", |params, tls_mode, _| -> Result<()> {
            with_temporary_database(params, tls_mode, |params, tls_mode| -> Result<()> {
                let conn = Connection::connect(params, tls_mode)?;
                conn.batch_execute("CREATE TABLE test()")?;
                conn.execute("TABLE test", &[])?;
                Ok(())
            })?
        })
        .expect("Failed to create temporary database");
        println!("{:#?}", result);
        result.expect("Inner result failed");
    }

    #[test]
    fn temp_db() {
        INIT.call_once(|| {
            env_logger::init();
        });

        let connect_params = ConnectParams::builder()
            .port(5432)
            .user("postgres", None)
            .database("postgres")
            .build(params::Host::Tcp("localhost".to_owned()));
        let result = with_temporary_database(
            connect_params,
            TlsMode::None,
            |params, tls_mode| -> Result<()> {
                let conn = Connection::connect(params, tls_mode)?;
                conn.batch_execute("CREATE TABLE test()")?;
                conn.execute("TABLE test", &[])?;
                Ok(())
            },
        )
        .expect("Failed to create temporary database");
        println!("{:#?}", result);
        result.expect("Inner result failed");
    }
}

依赖关系

~8–21MB
~334K SLoC