4

私はMVP(最低限の実行可能な製品)を取り組んでいます。管理ページを保護する簡単な方法を提供するために、私はAdminControllerにhttp_basic_authenticate_withを追加しました。Skip Rails http_basic_authenticate_with RSpecテスト

問題は、私は私のAdminControllerをテストしたいとき、私がログインしていないため(401)、「不正」を得ることである

このシナリオでは、認証をテストするためには無関係だ - 。それはただ一時的、およびようです私はすぐ次のスプリントに行きますが、それは削除される予定です - RSpec内でスキップしようとしています。

問題多くの方法で試してみましたが、問題はありません。

たとえば、認証を回避するために、http_basic_authenticate_withを変更しようとしました。このように:

require 'spec_helper' 

module ActionController 
    module HttpAuthentication 
    module Basic 
     def http_basic_authenticate_with(*args) 
     end 
    end 
    end 
end 


describe Admin::SubscribersController do 
    describe "GET 'index'" do 
    it "should be OK" do 
     get 'index' 
     response.should be_successful 
    end 
    end 
end 

しかし、私が実行すると、その単純なテストでは "false"が返されます。

Btwこのテストを簡略化するために、私はAdminControllerに空のインデックスアクションがあり、空のビュー(index.html.erb)があります。

答えて

4

最後に私はそれを働かせました。ドキュメントに記載されているように

何かが私のために動作しませんでした:

get 'index', nil, 'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials("admin", "password") 

だから私は、request.env [「HTTP_AUTHORIZATION」]を設定することである、それを行うには、「古い」アプローチを試してみました

request.env['HTTP_AUTHORIZATION'] = ActionController::HttpAuthentication::Basic.encode_credentials("admin","password") 

他の解決策はありませんでした。その間、私はこのままでします。

ありがとうございました。

0

認証をテストすることも、テストする必要もあります。認証されていない(今は)認証テストの書き込みテスト。 Testing HTTP Basic Auth in Rails 2.2+をご覧ください。

+0

おかげで、私の場合には(私はそれだけで一時的だし、おそらく来週言ったように、既に削除される予定です)、私はそれを避けたいです。出来ますか?どのようにそれをスキップするための任意の提案? –

+0

だから、テストは一切必要ありませんか?しかし、あなたはそれを避けるためにいくつかのメタプログラミングを行うことができます。これは、私が見つけたリンクの中で最速のオプションです。... –

+0

私はすみません、私は少し間違って表現したと思います。上記の例はあくまでも例です。私の実際のAdminControllerはそれだけではありませんが、HTTP認証は一時的なものです。パスワードを変更すると、テストを変更する必要があるため、テスト前に認証する必要はありませんでした。思考をスキップすると、より簡単でより良いアプローチになります。私がどのように飛ばすことができるかの例があるなら(私が与えた例が私が持っていた唯一のアイデアでした)、私に教えてください。 –

3

すべてのテストの認証をスキップしても問題がなければ、コントローラの場合はです。現在のプロジェクトで使用している技術は次のとおりです。

unless Rails.env.test? http_basic_authenticate_with name: "slothbear", password: "kuniklo" end

+0

私は大声でそれを打ち明けたので、私は条件を 'Rails.env.productionならif? 'に変更すると思います。私は本当に開発環境でも認証は必要ありません。私に大きな生産性をもたらしてくれてありがとう。 – slothbear

+0

テストとして 'production? 'を使用しないことをお勧めします:http://stackoverflow.com/q/8741398/2464 – slothbear