OmniAuth と Devise を使用して Twitter でサインインするための統合テストを作成しようとしています。リクエスト変数を設定するのに問題があります。コントローラーテストでは機能しますが、統合テストでは機能しないため、仕様ヘルパーを適切に構成していないと思います。私は周りを見回しましたが、実用的な解決策を見つけることができないようです。これが私がこれまでに持っているものです:
# spec/integrations/session_spec.rb
require 'spec_helper'
describe "signing in" do
before do
request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
visit new_user_session_path
click_link "Sign in with twitter"
end
it "should sign in the user with the authentication" do
(1+1).should == 3
end
end
この仕様は、テストに到達する前にエラーを発生させ、request
変数を初期化する必要がある場所がよくわかりません。エラーは次のとおりです。
Failure/Error: request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter]
NoMethodError:
undefined method `env' for nil:NilClass
現在request
、コントローラーの仕様とテスト パスで変数を使用していますが、統合テスト用に初期化されていません。
# spec/spec_helper.rb
Dir[Rails.root.join("spec/support/*.rb")].each {|f| require f}
...
# spec/support/devise.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
助けてくれてありがとう!