#django #mocking #testing

django-query_derive

django-query库的宏

5个版本

0.2.1 2022年6月1日
0.2.0 2022年6月1日
0.1.4 2022年4月15日
0.1.3 2022年4月11日
0.1.0 2022年4月5日

#12 in #django


3 个crate中使用 (通过 django-query)

MIT/Apache

67KB
1.5K SLoC

django-query

一组用于创建Django风格模拟端点的工具。基本用法是对你想要模拟拥有数据库的类型进行注释,派生必要的特性,然后创建一个 Endpoint 来提供可排序、可过滤的数据库。

示例用法

#[derive(Filterable, IntoRow, Sortable)]
struct Foo {
    #[django(sort, op(lt, gt))]
    a: i32,
    #[django(sort, op(icontains, iexact))]
    b: String,
}

#[tokio::test]
fn simple_test() {
    let server = MockServer::start().await;
    
    // create a Vec of struct Foo here, and optionally 
    // wrap it in an Arc. 
    
    // Now serve our mock database with wiremock
    Mock::given(matchers::method("GET"))
         .respond_with(Endpoint::new(foo_table, Some(&server.uri())));
    
    // And now we can make requests from our code like
    reqwest::get(&format!("{}?limit=5&offset=5&b__icontains=apple&ordering=-a"))
       .await
       .expect("error getting response")
       .json()
       .await
       .expect("error parsing response");
    // which will perform
    //  - pagination (5 responses, offset by 5)
    //  - filtering (only array members whose b member contains apple,
    //    case insensitively)
    //  - sorting (the results will be in decreasing order of the a
    //    member)
}

它集成了 persian-rugclone-replace,以提供可变集合的相互关联的对象。

许可证

此代码可在Apache-2.0MIT许可证下使用。

依赖

~1.5MB
~35K SLoC