Testing dengan test_client
Penjelasan
Flask menyediakan app.test_client() yang mensimulasikan HTTP request ke aplikasi tanpa perlu menjalankan server sungguhan — cocok dipasangkan dengan pytest atau unittest. Test client punya method seperti .get(path) dan .post(path, data=...) yang mengembalikan object response berisi .status_code, .data (bytes), dan .get_json() untuk API. Idealnya test dijalankan dengan konfigurasi TESTING=True dan database terpisah (misalnya SQLite in-memory) supaya tidak menyentuh data production.
Contoh Konsep
# pip install pytest
import pytest
from app import create_app
@pytest.fixture
def client():
app = create_app(config_class='TestingConfig')
app.config['TESTING'] = True
with app.test_client() as client:
yield client
def test_halaman_utama(client):
response = client.get('/')
assert response.status_code == 200
assert b'Halo' in response.data
def test_api_produk(client):
response = client.post('/api/produk', json={'nama': 'Mouse'})
assert response.status_code == 201
data = response.get_json()
assert data['nama'] == 'Mouse'
# jalankan: pytest
Praktikum
Lengkapi test untuk memastikan route '/produk/999' (tidak ada) mengembalikan status 404.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Pisahkan test unit (logika murni Python, tanpa Flask) dari test integrasi (lewat test_client) — test unit jauh lebih cepat dan sebaiknya jadi mayoritas test suite kamu.