He estado haciendo mucho de esto últimamente para proyectos de clientes. Los bloques más grandes para mí parecen ser el uso desenfrenado de javascript en línea con o sin RJS. [Nota al margen: hay una forma correcta y una incorrecta de hacer AJAX, y la mayoría de la gente está haciendo Doing It Wrong ™.] Normalmente uso pepino en gran medida con un poco de rspec para pruebas de unidades extrañas.
Las variables a considerar son diversas, pero un buen lugar para comenzar es con unas pocas pruebas unitarias para sus modelos. Cree algunas fábricas y pruebe sus validaciones, junto con cualquier comportamiento personalizado que crea que necesita pruebas.
Si no te gusta eso o si ya tienes un conjunto de pruebas unitarias y quieres agregar integración, la siguiente pregunta es hasta qué punto estás haciendo un montón de inline javascript o RJS. Si su aplicación es muy "ajaxy", tendrá que comenzar con el controlador de selenio para pepino, que es lento como melaza en febrero, pero lo hará bien. Una vez que tenga un conjunto de pruebas que cubran la funcionalidad completa (o incluso solo las cosas importantes) para su aplicación, comenzaría a refactorizar el javascript para que funcione de forma discreta.
Otra dirección que podría ir sería construir rspecs adicionales para sus controladores y vistas, pero realmente no me gusta este patrón que se está metiendo probar la aplicación en lugar de la funcionalidad.
Lo importante a recordar es que no todo tiene que suceder de la noche a la mañana. Analice sus flujos de trabajo (por ejemplo, inicie sesión, realice la tarea A, realice la tarea B, etc.) y determine cuáles cubren el 80% de los casos de uso típicos. Pon a prueba los primeros. Luego use algo como metric_fu o simplemente rcov (o cualquier otra herramienta de cobertura) y encuentre áreas de su código que sean densas en lógica y no probadas. Me gusta metric_fu para esto porque el conjunto de herramientas que ejecuta puede proporcionarle ambas piezas de información.
+1 porque me estaba haciendo la misma pregunta –