Даже не представляю как работать с динамическими языками без тестов/спецификаций, использую Jasmine.
Например, тестирование логики (простенький IoC / DI)
https://github.com/alexeypetrushin/r...on_spec.coffee
сам код
https://github.com/alexeypetrushin/r...jection.coffee
Тестирование интерфейса (Backbone.js)
https://github.com/alexeypetrushin/r...es_spec.coffee
сам код
https://github.com/alexeypetrushin/r...ntities.coffee
Про то что все не протестировать и про кроссбраузерность:
Да, но есть хорошая новость - ошибки в програмных продуктах подчиняются закону Парето (power law) и распределены нелинейно. Хорошая - потому что можно писать всего-лишь простейшие тесты для 20% функционала и это позволит отловить более 80% всех ошибок.
Про кроссбраузерность - можно селениумом тестровать, но это уже сложно.
П.С. кстати, кто использует Jasmine (особенно6 если используете ее с CoffeeScript), может буде интересно, вот эта штука
http://alexeypetrushin.github.com/mary позволяет поменять форму записи expectation и писать
'Mary'.should match: /ry/
или
'Mary'.should().match /ry/
вместо
expect('Mary').toMatch(/ry/)