Here just my 2 cents:
TDD on itself has nothing to do with your way of working described in your question. Agile / Scrum / Lean / Kanban would in my opinion.
Writing unit tests before you actually write your code is a good practice, which you guys are doing if I understand you correctly.
I agree with you that's a bit of weird to postpone the actual integration of code to the end of the sprint. If hell breaks loose, you got nothing at the end of the sprint. In other words, your potential shippable product will not exist until the last risky card is done.
If you want to break through this way of working, I'd consider googling for continuous integration. There you strive to integrate code as often as possible, in order to find integration bugs as soon as possible.
So long story short:
- No it's not a good Agile practice, and
- Yes it would be better to integrate every done, done, done task
Hope this helps you to make a step towards a true agile/lean team! Trust your instincts, you do get it :).