2017-07-08 2 views
0

Mocking habe ich eine View-Funktion, die Benutzer-Logineine Hilfsfunktion in django Ansicht Test

so etwas wie diese

es sieht fordert initiiert:

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

Die Anforderung von einer anderen Funktion verarbeitet wird, dann

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

Und dann

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

Das Problem besteht beim Testen meines Codes, ich möchte keine Nachrichten an eine Telefonnummer während des Testens senden.

Meine Anmelde-Test-Funktion sieht ungefähr so ​​aus, ist es möglich, es zu verspotten, ohne meinen Code zu ändern?

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) 

All diese Funktionen, die von anderen genannt wurden, sind in separaten Modulen befindet

Antwort

0

Wenn Sie tatsächlich die Nachricht nicht auf einem physischen Telefon erhalten möchten, können Sie online SMS-Empfänger verwenden . Überprüfen Sie diese blog.

Zusätzlich können Sie Nachrichten über andere kostenlose Online-Dienste wie Way2sms senden. Sie müssen sie nur googlen. Um dies in Python zu tun, müssen Sie das Web-Parsing mit urllib2/requests und beautifulsoup verwenden, was eine völlig neue Frage ist.

Oder Sie können diese Funktion überspringen, indem Sie einfach den Absendercode der Nachricht auskommentieren oder true von der Funktion zurückgeben.

Wenn Sie gefährlich leben wollen, denken Sie darüber nach, eine Konfigurationsdatei zu erstellen, die Ihnen hilft, Schalter zu erstellen, die sagen, ob etwas ausgeführt werden soll oder nicht.

+0

danke für die schnelle Antwort, die send_otp Funktion ruft tatsächlich eine API von Drittanbietern, um eine SMS an das Telefon des Benutzers zu senden und die "Antwort" ist, wenn die Nachricht erfolgreich war, kann ich das tatsächliche Code-Snippet, wenn Sie möchten nur um Dinge zu vereinfachen. –

+0

Oh, also im Grunde, Sie versuchen zu überprüfen, ob die Textnachrichten erfolgreich an ein Telefon gesendet werden, aber nicht wirklich eine Nachricht richtig senden möchten? –

+0

Ich möchte nur, dass die Funktion wahr (das die Nachricht gesendet wird) zurückgibt, aber tatsächlich keine Nachricht sendet. Es ist wie das Überschreiben mit etwas wie "return True" –