Fakultas Ilmu Komputer UI

Commit 64f0eb4e authored by Muhammad Ilham Peruzzi's avatar Muhammad Ilham Peruzzi
Browse files

Selesai exercise 9 part 1

parent 8703fc54
Pipeline #26226 passed with stages
in 61 minutes and 38 seconds
......@@ -176,4 +176,10 @@ messages.add_message(
"Check your email, we've sent you a link you can use to log in."
)
```
Kedua implementasi tersebut, yaitu penggunaan message_success atau message.add_message akan memberikan output yang sama. Namun, dikarenakan mock yang dibuat terikat dengan message.success, maka mock yang dibuat akan rusak jika kita menggunakan implementasi message.add_message, sehingga mocking tersebut sangat bergantung pada bagaimana kita melakukan implementasi program tersebut (tightly coupled with the implementation).
\ No newline at end of file
Kedua implementasi tersebut, yaitu penggunaan message_success atau message.add_message akan memberikan output yang sama. Namun, dikarenakan mock yang dibuat terikat dengan message.success, maka mock yang dibuat akan rusak jika kita menggunakan implementasi message.add_message, sehingga mocking tersebut sangat bergantung pada bagaimana kita melakukan implementasi program tersebut (tightly coupled with the implementation).
# Cerita Exercise 9
## Mengapa Functional Test Subbab 20 lebih baik dari sebelumnya?
Hal tersebut dikarenakan pada subbab 20, kita menggunakan session untuk mengatur user sudah ter-autentikasi, sehingga kita tidak perlu melakukan login berulang-ulang saat melakukan test. Hal tersebut termasuk kedalam Text Fixture dimana kita melakukan 'seed' ke dalam database agar status user sudah ter-autentikasi. Selain itu, penerapan functional test pada subbab 20 juga menggunakan decorator buatan sendiri, yaitu decorator @wait yang dapat menngurangi duplikasi code pada pembuatan functional test sehingga test yang dibuat terlihat lebih rapi dan readable.
\ No newline at end of file
......@@ -8,6 +8,18 @@ import environ
from django.contrib.staticfiles.testing import StaticLiveServerTestCase
from unittest import skip
def wait(fn):
def modified_fn(*args, **kwargs):
start_time = time.time()
while True:
try:
return fn(*args, **kwargs)
except (AssertionError, WebDriverException) as e:
if time.time() - start_time > MAX_WAIT:
raise e
time.sleep(0.5)
return modified_fn
class FunctionalTest(StaticLiveServerTestCase):
......@@ -26,6 +38,7 @@ class FunctionalTest(StaticLiveServerTestCase):
def tearDown(self):
self.browser.quit()
@wait
def wait_for_row_in_list_table(self, row_text):
MAX_WAIT = 10
start_time = time.time()
......@@ -39,18 +52,12 @@ class FunctionalTest(StaticLiveServerTestCase):
if time.time() - start_time > MAX_WAIT:
raise e
time.sleep(0.5)
@wait
def wait_for(self, fn):
start_time = time.time()
MAX_WAIT = 10
while True:
try:
return fn()
except (AssertionError, WebDriverException) as e:
if time.time() - start_time > MAX_WAIT:
raise e
time.sleep(0.5)
return fn()
@wait
def wait_to_be_logged_in(self, email):
self.wait_for(
lambda: self.browser.find_element_by_link_text('Log out')
......@@ -64,4 +71,6 @@ class FunctionalTest(StaticLiveServerTestCase):
lambda: self.browser.find_element_by_name('email')
)
navbar = self.browser.find_element_by_css_selector('.navbar')
self.assertNotIn(email, navbar.text)
\ No newline at end of file
self.assertNotIn(email, navbar.text)
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment