Это то, что меня бесило за последние несколько дней. У меня есть действие, которое позволяет аутентифицированным пользователям загружать ресурсы на сайт. Я знаю, что действие контроллера правильное, так как я могу выполнить процесс вручную, однако я хочу проверить его с помощью rspec.
Мне нужно использовать помощник request
, чтобы я мог повторно использовать аутентифицированный сеанс, который является :given
для этого набора тестов.
it "should allow authenticated file uploads" do
file = File.open(a_valid_file)
mock_file = mock("file")
mock_file.stub!(:path).and_return(file.path)
request( resource(:assets), :method => "POST",
:params => { :file =>
{:tempfile => mock_file, :filename => File.basename(file.path)} }
)
end
Если я устанавливаю точку останова внутри спецификации, все работает хорошо, однако, когда я запускаю спецификацию и пытаюсь получить доступ к пути в действии контроллера через отладчик, я получаю следующее:
e file[:tempfile].path
NoMethodError Exception: undefined method `path' for "#[Spec::Mocks::Mock:0x3fda2a4736c0 @name=\"file\"]":String
Я предполагаю, что stub!(:path)
не устанавливается ни для какого фиктивного объекта, который делает это через запрос.
Вопрос в следующем: собираюсь ли я найти правильный способ проверки загрузки файлов, а если нет, то каким другим способом?