Techioz Blog

これで CORS エラーが解決され、機能するようになりました。

概要

レール 6.1.3.1 Rスペック

基本的な動作仕様コード:

describe "index" do
  it "should show me the list" do
    visit dashboard_targets_path
  end
end

ルートファイル

namespace :dashboard do
  resources :targets 
end

エラーには例外が表示されますが、奇妙なことに、アプリを呼び出していないかのように見え、テストコードで正しく失敗するだけです。

  1) interaction for Dashboard::TargetsController index should show me the list
     Failure/Error: visit dashboard_targets_path
     
     NoMethodError:
       undefined method `empty?' for nil:NilClass
     # ./spec/system/dashboard/targets_behavior_spec.rb:16:in `block (3 levels) in <top (required)>'
     # /Users/jason/.rvm/gems/ruby-2.6.6/gems/webmock-3.12.2/lib/webmock/rspec.rb:37:in `block (2 levels) in <main>'
     # /Users/jason/.rvm/gems/ruby-2.6.6/gems/rspec-wait-0.0.9/lib/rspec/wait.rb:46:in `block (2 levels) in <main>'

テストコード内で失敗しているようです。デバッガーにドロップしてdashboard_targets_pathを直接実行すると、同じ例外が発生します。したがって、問題はテスト環境内でヘルパーを使用していることだけです。

開発環境内では、この機能は機能します。

解決策

ここでの問題は、config/environments/test.rb ファイルにdefault_url_options があることです。

config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }

Rails gem に消えるエラーが発生した場合、それらをデバッグする良い方法は次のとおりです。

begin
  // your failing code here
rescue StandardError => e
  puts e.backtrace
  byebug
  puts e.inspect
  raise (e)
end

警告: フロー制御に例外処理を明示的に使用する場合を除き、このコードをアプリ内に残したり、チェックインしたりしないでください (推奨されません!)。これはデバッグ目的でのみ推奨されます。

ここでは、Gem 内の失敗している行番号への完全なバックトレースが表示されます。 Gem をデバッグするときは注意してください。行った変更は必ず元に戻してください。また、Gem コード内のモンキー パッチは製品コードに影響を与えないことを確認してください。

gem pristine または gem pristine –all を実行すると、ローカルにインストールされた gem に加えられた変更を元に戻すことができることに注意してください。