gpt4 book ai didi

rust - 用火箭和柴油进行测试

转载 作者:行者123 更新时间:2023-12-05 05:47:33 28 4
gpt4 key购买 nike

我正在尝试使用 DieselRocket 开发网络应用程序,方法是遵循 rocket guide .我无法理解如何测试此应用。

//in main.rs

#[database("my_db")]
struct PgDbConn(diesel::PgConnection);

#[post("/users", format="application/json", data="<user_info>")]
fn create_new_user(conn: PgDbConn, user_info: Json<NewUser>) {
use schema::users;
diesel::insert_into(users::table).values(&*user_info).execute(&*conn).unwrap();
}

fn main() {
rocket::ignite()
.attach(PgDbConn::fairing())
.mount("/", routes![create_new_user])
.launch();
}

// in test.rs

use crate::PgDbConn;

#[test]
fn test_user_creation() {
let rocket = rocket::ignite().attach(PgDbConn::fairing());
let client = Client::new(rocket).unwrap();
let response = client
.post("/users")
.header(ContentType::JSON)
.body(r#"{"username": "xyz", "email": "temp@abc.com"}"#)
.dispatch();
assert_eq!(response.status(), Status::Ok);
}

但这会修改​​数据库。我怎样才能确保测试不会改变数据库。

我尝试创建两个数据库并按以下方式使用它们(我不确定是否推荐这样做)

#[cfg(test)]
#[database("test_db")]
struct PgDbConn(diesel::PgConnection);

#[cfg(not(test))]
#[database("live_db")]
struct PgDbConn(diesel::PgConnection);

现在我想我可以通过以下方式使用 diesel::connection::Connection 特性的 test_transaction 方法:-

use crate::PgDbConn;

#[test]
fn test_user_creation() {
// !!This statment is wrong as PgDbConn is an Fn object instead of a struct
// !!I am not sure how it works but it seems that this Fn object is resolved
// !!into struct only when used as a Request Guard
let conn = PgDbConn;

// Deref trait for PgDbConn is implemented, So I thought that dereferencing
// it will return a diesel::PgConnection
(*conn).test_transaction::<_, (), _>(|| {
let rocket = rocket::ignite().attach(PgDbConn::fairing());
let client = Client::new(rocket).unwrap();
let response = client
.post("/users")
.header(ContentType::JSON)
.body(r#"{"username": "Tushar", "email": "temp@abc.com"}"#)
.dispatch();
assert_eq!(response.status(), Status::Ok);
Ok(())
});
}

上面的代码显然无法通过编译。有没有办法将此 Fn 对象解析为结构并获取其中的 PgConnection。我什至不确定这是否是正确的做事方式。

在同时使用 RocketDiesel 时是否有推荐的测试方法?

最佳答案

这基本上不会像您想象的那样工作,因为 conn 将是一个不同于火箭为您生成的任何连接。 test_transaction 模式假定您对所有内容都使用相同的连接。

关于rust - 用火箭和柴油进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70988410/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com