2017-06-06 34 views
0

我用的是外地request.json_body檢索編碼的JSON身體像:如何在金字塔中單元測試request.json_body?

@view_config(route_name='reminder', renderer='json', permission='view', xhr=True, request_method='POST') 
def reminder(request): 
    process(body.request.json_body) 
    return {'result':'OK'} 

我怎麼能單位這個測試(我是蟒蛇新手,使用3.4.4)。我用DummyRequest()從金字塔的測試,但在運行測試時抱怨:

'DummyRequest' object has no attribute 'json_body' 

我理解,因爲我讀的是DummyRequest受到限制。 我該如何填充「測試」請求與一些JSON的身體? 我想我找錯了角落,因爲我不能(谷歌)這個好消息:(

回答

3

您可以在創建對象時將其作爲構造函數參數。

testing.DummyRequest(json_body=json_params, method='POST') 

這應該有效。爲我工作

-1

往裏Pyramid's test directory,然後搜索「JSON」。有跨越13個文件,82場比賽。我想在至少有一個匹配會產生一個測試,你可以重複使用

1

有幾種方法可以做到這一點我喜歡使用WebTest,它允許你從你的wsgi可調用中創建一個測試應用程序,然後你。可以叫這個測試對象進出JSON發送簡言之,它看起來是這樣的:

# my_app is a wsgi callable 
    test_app = webtest.TestApp(my_app) 
    # my json post body as a dict 
    params = {'name': 'Iain', 'quest': 'find grail'} 
    response = test_app.post_json('/cross_bridge', params=params}) 
    assert response.json['status'] == 'success', "should be a success msg" 

我們書呆子會認爲AB看看這是單元測試還是集成測試或功能測試,但我認爲這就是您要找的。 WebTest文檔還有其他例子。請注意,您也可以傳入將會進入WSGI字典的值,並且有傳入標頭和驗證標頭的方法。我們將此與Pyramid的遠程用戶身份驗證策略一起使用,以設置哪些用戶登錄請求。我把所有的東西都包裝在標準的單元測試類中,用一個基類來做我額外的樣板。

+0

謝謝Lain,我認爲這是我所需要的,但是沒有wsgi要求的單元測試嗎? – edbras

+0

要降低一層,跳過和跳出json,可以直接測試View可調用,調用它並檢查它返回的字典。金字塔文檔中有很好的例子。 –