2017-07-08 48 views
0

我有一個啓動用戶的登錄請求懲戒在Django視圖測試的輔助功能

它看起來是這樣的一個觀點功能:

def initiate_login(request): 
    # get request parameters 
    return check_user_and_send_otp(login_id) 

請求然後由另一個函數處理

def check_user_and_send_otp(login_id): 
    # check if user exits 
    return send_otp_to_user(phone_number) 

然後另一個功能

def send_otp_to_user(phone_number): 
    # sends a message to user 
    return response 

問題出在測試我的代碼時,我不想在測試時將消息發送到電話號碼。

我的登錄測試函數看起來有點像這樣,是否可以在不改變我的代碼的情況下進行模擬?

def test_login_initiator(self): 
    response = self.client.post(self.login_url, data=self.login_data, content_type="application/json", **self.headers) 
    self.assertEqual(response.status_code, 200) 

所有被他人所調用的這些功能都位於單獨的模塊

回答

0

如果你不希望實際接收物理手機上的信息,您可以使用網上短信接收器。看看這blog

此外,您可以通過其他免費在線服務(如Way2sms)發送消息。你只需要谷歌他們。要在Python中執行此操作,您需要使用urllib2/requests和beautifulsoup進行web解析,這是一個全新的問題。

或者您可以通過簡單地註釋掉消息發送者代碼或從函數返回true來跳過此函數。

如果你想生活危險,考慮製作一個配置文件,它可以幫助你製作開關,告訴你是否執行某些事情。

+0

感謝您的快速響應,send_otp函數實際上調用第三方API來發送短信給用戶的手機,'response'是如果消息成功,我可以發佈實際的代碼段,如果你喜歡。這是隻是爲了簡化事情。 –

+0

哦,基本上,你試圖檢查文本消息是否被成功發送到手機,但不想實際發送正確的消息? –

+0

我只想讓函數返回true(即發送消息),但實際上不發送消息。這就像用'return True'來覆蓋' –