Testing the Full Application
Building features is only half the job. Testing ensures those features actually work — and keep working as you make changes. For a full stack application, you need to test each layer and how they work together.
Layers of Testing
Testing happens at different levels, each catching different types of problems:
Unit tests check individual functions in isolation. Does your validate_todo_text() function correctly reject empty strings?
Integration tests check that components work together. Does your API endpoint correctly save to the database and return the right response?
End-to-end tests simulate real user behavior. Can a user create a todo, see it in the list, and mark it complete?
Start with manual testing, then add automated tests for critical paths.
Manual Testing Checklist
Before considering your feature complete, walk through these scenarios:
- Can create a new todo
- New todo appears in the list immediately
- Can mark a todo as complete
- Can delete a todo
- Data survives page refresh
- Data survives server restart
- Proper error shown when network fails
- Input validation prevents empty todos
Check each item by actually doing it in your browser. Watch both the UI and your terminal logs.
Testing the Happy Path
The "happy path" is when everything goes right — valid input, network works, database responds. Test this first:
- Open your frontend
- Create a todo with normal text
- Verify it appears
- Refresh the page
- Verify it's still there
If the happy path fails, fix it before testing edge cases.
Testing Edge Cases
Edge cases are unusual situations that might break your app:
- What happens with an empty todo?
- What about a very long todo (1000+ characters)?
- What if you click submit twice quickly?
- What if the backend is down?
Ask AI: "What edge cases should I test for my todo application?" You'll get a comprehensive list that catches issues you hadn't considered.
Using Browser DevTools
Keep the Network tab open while testing. Watch for:
- Failed requests (red entries)
- Unexpected response data
- Slow requests that might indicate problems
The Console tab shows JavaScript errors that might not be visible in the UI.
When to Add Automated Tests
Once your manual testing passes, consider automating the most important tests. Automated tests run quickly and catch regressions — bugs that reappear after being fixed.
Start with tests for your most critical features. For a todo app, that's creating and retrieving todos.