Practicing advanced JavaScript concepts through test-driven development