Как проверить загрузку файлов с помощью спецификаций Rails, Paperclip и RSpec? - PullRequest
0 голосов
/ 05 января 2012

У меня есть спецификация запроса, которая пытается проверить функциональность загрузки файлов в Rails 3.1 для меня. Спецификация (частично) выглядит так:

get document_path(Document.first)
logger(response.body)
response.should be_success

Не удается с:

Failure/Error: response.should be_success
       expected success? to return true, got false

Но если я проверю загрузку в браузере, он загрузит файл правильно.

Вот действие в контроллере:

def show
  send_file @document.file.path, :filename => @document.file_file_name,
                                 :content_type => @document.file_content_type
end

И мой регистратор дает эту информацию об ответе:

<html><body>You are being <a href="http://www.example.com/">redirected</a>.</body></html>

Как мне пройти этот тест?

Обновление:

Как уже отмечалось, один из моих before_filters делал перенаправление. Причина в том, что я использовал Capybara для входа в тест, но не использовал его методы для навигации по сайту. Вот что сработало (частично):

click_link 'Libraries'
click_link 'Drawings'
click_link 'GS2 Drawing'
page.response.should be_success #this still fails

Но сейчас я не могу найти способ проверить, что фактический ответ был успешным. Что я тут не так делаю.

Ответы [ 2 ]

1 голос
/ 05 января 2012

Скорее всего, при запуске теста вызывается redirect_to. Вот что я хотел бы сделать, чтобы определить причину.

  1. Добавьте ведение журнала в любые фильтры до, которые могли бы выполняться для этого действия.
  2. Добавить запись в нескольких точках в самом действии.

Это скажет вам, как далеко заходит выполнение до перенаправления. Который в свою очередь скажет вам, какой блок кода (вероятно, before_filter) перенаправляет.

Если бы мне пришлось сделать предположение на макушке головы, я бы сказал, что у вас есть before_filter, который проверяет, вошел ли пользователь в систему. Если это правда, то вам нужно убедиться, что ваши тесты создайте сеанс входа в систему перед вызовом действия, защищенного входом в систему.

0 голосов
/ 10 января 2012

Я получал такое же перенаправление, пока не понял, что виноват мой метод входа в систему (пользователя).Извлеченный из этой SO ссылки , я изменил свой метод входа в систему:

# file: spec/authentication_helpers.rb
module AuthenticationHelpers
  def login(user)
    post_via_redirect user_session_path, 'user[email]' => user.email, 'user[password]' => user.password
  end
end

В моих тестах:

# spec/requests/my_model_spec.rb
require 'spec_helper'
require 'authentication_helpers'

describe MyModel do
  include AuthenticationHelpers
  before(:each) do
    @user = User.create!(:email => 'user@email.com', :password => 'password', :password_confirmation => 'password')
    login(@user)
  end

  it 'should run your integration tests' do
    # your code here
  end
end

[FWIW: я использую Rails 3.0, Devise, CanCan и Webrat]

...