でした。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機能に基づいて、私はログインに近いものに近づいていないと思っていますか?そうでない場合、私は何を間違っているのですか?
あなたがhttps://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-andを読みました-4-(および-RSpec) – zetetic
また、 'login_with'メソッドはどこで使用されていますか? – zetetic
@zeteticはあなたのためにrspecメソッドを更新しました... 'login_with'があります。 – Godzilla74