2017-02-21 19 views
0

でした。root_urlに正常にログインするには、をFactoryGirlで作成していますが、companyが必要です。Devise Rspecはレスポンスが成功ステータスコード(2xx)を持つと期待していましたが、それは302

ユーザーメソッドをスタブしてログインすることは何もできません。私はユーザーのDevise部分にthis tutorialをフォローしており、ユーザーにはcompanyが関連付けられている必要があるため、少し修正する必要がありました。

私は今考案のauthenticateフィルタとで失敗それをテストで私の最初のパスの後ろにあるScansと呼ばれる新しいモデル/コントローラを作成しました:

5) ScansController GET #show returns http success 
    Failure/Error: expect(response).to have_http_status(:success) 
     expected the response to have a success status code (2xx) but it was 302 
    # ./spec/controllers/scans_controller_spec.rb:32:in `block (3 levels) in <top (required)>' 
    # ./spec/spec_helper.rb:127:in `block (3 levels) in <top (required)>' 
    # ./spec/spec_helper.rb:126:in `block (2 levels) in <top (required)>' 

スペックが現在ある:

require 'rails_helper' 

RSpec.describe ScansController, type: :controller do 

    before(:all) do 
    @user = build(:user) 
    @company = build(:company) 
    @device = build(:device) 
    @scan = build(:scan) 
    end 

    describe "GET #show" do 
    it "returns http success" do 
     login_with @user 
     get :show, :device_id => @device.id, :id => @scan.id 
     expect(response).to render_template(:show) 
    end 
    end 

返信内容を確認したいので、putsを返信しています。

ScansController 
    GET #show 
302 
{"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "Location"=>"http://test.host/login", "Content-Type"=>"text/html; charset=utf-8"} 
#<Rack::BodyProxy:0x007fb52a7407c0> 

だから、私は戻ってControllerHelpersの私login_with方法が正しく動作していないことを私に告げる私のログインページにリダイレクトされています:

module ControllerHelpers 
    def login_with(user = double('user'), scope = :user) 
    current_user = "current_#{scope}".to_sym 
    if user.nil? 
     allow(request.env['warden']).to receive(:authenticate!).and_throw(:warden, {:scope => scope}) 
     allow(controller).to receive(current_user).and_return(nil) 
    else 
     allow(request.env['warden']).to receive(:authenticate!).and_return(user) 
     allow(controller).to receive(current_user).and_return(user) 
    end 
    end 
end 

を今、私のログイン機能は、現在、(手動テスト)動作しません。 ApplicationController後に火災がPagesController#homeである第一のコントローラ:それはこの問題に関連していないようですので、

def home 
    if current_user && current_user.company 
    verify_subscription 
    .... 
    else 
    redirect_to new_company_path 
    end 
end 

verify_subscriptionは、ユーザーが失敗した場合も、new_company_pathに送信されます。

私の初歩的なrspec機能に基づいて、私はログインに近いものに近づいていないと思っていますか?そうでない場合、私は何を間違っているのですか?

+0

あなたがhttps://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-andを読みました-4-(および-RSpec) – zetetic

+0

また、 'login_with'メソッドはどこで使用されていますか? – zetetic

+0

@zeteticはあなたのためにrspecメソッドを更新しました... 'login_with'があります。 – Godzilla74

答えて

0

私はついにテストに合格しました。私は私のユーザー工場内の会社を作ることになった:

after(:build) do |user| 
    user.company = create(:company) 
end 
関連する問題