Если вы переместили код из контроллера в View, то он фактически вышел за рамки функционального теста.
Я не знаю правильный класс, на который можно рассчитывать ... но вы, вероятно, сможете это выяснить, в методе "collect_things" сделайте что-то вроде: logger.error self.class.name
- который выложит имя класса в журнал для вас. Тогда вы можете поместить свои ожидания в этот класс.
Теперь мы подошли к сути вопроса ... Вы бы переместили этот код в представление?
Мое мнение, что вы не должны. Настройка набора объектов модели - это именно то, что должно идти в коде контроллера - что если вы позже решите, что хотите отобразить те же данные в файле CSV, или в виде RESTful xml API? - вам все еще нужен один и тот же набор объектов, независимо от того, какое представление вы используете. Поэтому моя окончательная рекомендация - перенести этот метод обратно в контроллер, где он и должен быть.
Редактировать: подписка теперь является устаревшим советом и не относится к этому пользователю, но может относиться к другим
Если вы тестируете с использованием rspec - он фактически не отображает представления во время функционального теста (если вы не включили его специально), и поэтому любой код, называемый представлениями формы, не будет выполняться.
Если вы хотите проверить, что View вызывает что-то, вам нужно либо включить это, либо проверить это в ваших view-тестах.