@@ -119,7 +119,7 @@ Destroying test database for alias 'default'...
```
Dari hasil tersebut dapat kita lihat bahwa semua mutant sudah berhasil di kill oleh test yang ada.
## Exercise 6
## Exercise 7
**Spiking**
Spiking adalah sebuah tahapan coding dimana kita mengeksplor suatu API baru atau solusi-solusi baru. Pada exercise, spiking dilakukan pada branch passwordless-spike dimana kita mengeksplor mengenai pengimplementasian paswordless auth.
...
...
@@ -127,3 +127,50 @@ Spiking adalah sebuah tahapan coding dimana kita mengeksplor suatu API baru atau
**De-Spiking**
De-spiking adalah tahapan dimana kita mengimplementasikan hasil di spiking dan menggunakannya di production codebase (master). Karena di spiking dapat dilakukan tanpa test, pada tahap De-spiking kita akan menggunakan TDD dalam implementasinya.
## Exercise 8
**Kenapa mocking dapat membuat implementasi yang kita buat tightly coupled?**
Penggunaan Mocking seringkali terikat pada bagaimana kita mengimplementasikan sesuatu. Ketika kita melakukan implementasi yang berbeda, walaupun hasilnya sama, test bisa saja tidak terpenuhi. Hal ini yang dimaksud dari "Mocks Can Leave You Tightly Coupled to the Implementation". Sedangkan biasanya, mengetest behavior lebih baik daripada mengetest detil implementasi.
Contohnya pada kasus untuk test (tanpa mock) berikut **accounts/tests/test_views.py**
expected = "Check your email, we've sent you a link you can use to log in."
self.assertEqual(
mock_messages.success.call_args,
call(response.wsgi_request, expected),
)
```
Dengan implementasi di **accounts/views.py** seperti berikut ini
```
messages.add_message(
request,
messages.SUCCESS,
"Check your email, we've sent you a link you can use to log in."
)
```
Dengan implementasi tersebut, test tanpa mock terpenuhi sedangkan test dengan mock gagal terpenuhi. Dalam kata lain, dengan mock kita harus memiliki detil implementasi yang sesuai pada views, walaupun sebenarnya hasilnya sama sama benar.