2013-02-11 42 views
1

我想測試懲戒在一個Django應用程序一個裝飾

  • 如果意見裝飾工作正常
  • 如果正確的觀點被稱爲

所以,這裏的裝飾get_object,並查看features是在myapp.views

@get_object 
def features(request, object): 
    return {} 

我嘗試嘲笑他:

new_view = Mock(__name__='features', return_value={}) 
decorated = get_object(new_view) 

with patch('myapp.views.features') as features: 
    features = decorated 
    client = Client() 
    response = client.get('/features') 
    print new_view.call_args 

這說明不了什麼,彷彿模擬對象不叫,但我想它應該是。

我怎樣才能正確地嘲笑裝飾看法?

回答

1

當你調用patch您嘗試使用新MagicMock品牌更換您的看法。既然你手動構建一個模擬你查看你應該更多的像做(未經測試):

new_view = Mock(__name__='features', return_value={}) 
features = get_object(new_view) 

with patch('myapp.views.features', features): 
    client = Client() 
    response = client.get('/features') 
    print new_view.call_args 

這將取代myapp.views.features用手卷起模擬。

雖然在一般我會建議你測試你的裝飾孤立而不使用Django的測試客戶端。你真的把兩個測試混合在一起。首先是確定裝飾器是否有責任,另一個是確保請求被正確路由。