2014-03-13 69 views
1

我正在使用hammock庫將請求抽象爲內部API。在我的代碼,其中self.api是一個吊牀對象,我提出以下電話:。嘲笑跨庫的調用鏈

帖= self.api.posts()獲取(PARAMS =參數)以.json()獲得( '對象')

其中.GET返回響應對象,.json將其轉換爲字典,而.get返回該字典中'對象'鍵的值。

我想要的是整個調用只需返回我已經設置的燈具。但是,當我嘗試類似self.worker.api.posts.get = Mock(return_value=fixture)時,它不起作用。它會調用實際的API。

這是可能的,還是我應該放棄試圖嘲笑這樣一個具體的電話,只是解決嘲笑包含它的方法?

+0

懲戒包含這整個事情將是清潔,沒有任何懷疑的方法。 – alecxe

回答

1

您需要在嘲笑上設置所有return_values。當你調用self.api.posts()時,返回一個模擬,並且你想得到這個模擬並設置它的返回值,這將是一個擁有GET()方法的對象,你也想嘲笑它的返回值,直到你想要模擬的最後一次調用。

這裏的例子:

self.api.posts.return_value.GET.return_value.json.return_value.get = Mock(return_value=fixture)

我的工作例如:

json_obj = mock.MagicMock(return_value=self.hardcoced_labels) con.return_value.repos.return_value.labels.GET.return_value.json = json_obj