2012-01-05 22 views
0

私はRails 3.1のファイルダウンロード機能をテストしようとしているリクエスト仕様を持っています。 (一部)の仕様は次のようになります。Rails、Paperclip、RSpec要求仕様でファイルをテストするには?

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の一つは、リダイレクトをしていた、と指摘しました。その理由は、テストでログインするために私はカピバラを使用していたが、サイトをナビゲートするための方法を使用していないからです。

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

しかし、実際の応答が成功したかどうかをテストする方法はまだわかりません。私はここで間違って何をしていますか?

+1

[FWIW私はRailsの3.0、工夫、カンカンとWebratを使用していますが]にサウンド私はアクションが実行される前にリダイレクトされています(ユーザーがログインしていることを確認する)前のようなフィルタです。 –

+0

あなたにスポットがあります。私はまだ応答をテストするように見えることはできません。 – croceldon

+0

@croceldon:下のログイン方法(AuthenticationHelpers内)が違いを生み出すかどうかを教えてください。同じ問題かどうかを知りたいと思っています。 –

答えて

1

ほとんどの場合、テストを実行するとredirect_toが呼び出されています。原因を特定するために私が行うことは次のとおりです。

  1. このアクションで実行される可能性があるすべてのフィルタにログを追加します。
  2. アクション自体のいくつかのポイントでロギングを追加します。

これは、リダイレクトの前に実行がどのくらいまでになるかを示します。どのコードブロック(おそらくbefore_filter)がリダイレクトしているかを教えてくれるでしょう。

私は頭の上から推測しなければならない場合は、ユーザがログインしているかどうかを確認するbefore_filterがあると言います。もしそうなら、テストが作成されていることを確認する必要がありますログイン保護されたアクションを呼び出す前にログインしたセッション。

+0

私のテストでは、ユーザーのログインセッションが作成されるため、どのように問題が発生するかわかりません。私があなたが言及した伐採を試みることによって何がわかるかを見ていきます。 – croceldon

+0

あなたは正しいです。これはログインしたセッションの問題でした。しかし、私はまだ実際のレスポンスをテストすることはできません(上記の編集を参照)。 – croceldon

0

ログイン(ユーザー)メソッドが原因であることを認識するまで、私は同じリダイレクトを取得していました。 this SO linkからCribbed、私は私のログイン方法を変更:

私のテストでは
# 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 => '[email protected]', :password => 'password', :password_confirmation => 'password') 
    login(@user) 
    end 

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

関連する問題