Brian Marick wrote down a design he would use to allow the different web application layers to be tested without too many end-to-end tests.
I wonder if Rails' components could be reimagined/rewired to work more like this.