У меня есть контроллер Rails, где я случайно определил метод edit внутри метода create.
Мой контроллер с ошибкой:
class UsersController < ApplicationController
...
def create
@user = User.new(params[:user])
...
def edit
@user = User.find(params[:id])
@title = "Edit user"
@check = "BORK" # something I added for testing the rendered output
end
end
end
Пример теста;
it "should have the right title" do
get :edit, :id => @user
response.should have_selector('title', :content => 'Edit user')
end
Поэтому, когда я запускаю тесты (я использую rspec) и выводлю response.body, шаблон User edit.html.erb отображается правильно; все переменные экземпляра видны. Итак, все тесты пройдены.
Посещение URL 'edit' правильно показывает ошибку; шаблон использует переменную экземпляра @user, и он не установлен правильно. Конечно, исправление контроллера исправляет ошибку.
Я не понимаю, почему тесты проходят вообще, и почему в тесте все значения переменных экземпляра видны?
Мой инстинкт подсказывает, что это проблема масштаба? Что-то о том, что @user является переменной экземпляра, и что в тестах он установлен в рамках теста, но в моем контроллере он находится в рамках внутреннего метода edit? Но как тест находит метод «редактирования»? В какой области существует этот внутренний метод редактирования?