Michael Hartl の Rails チュートリアルに従いながら、テスト セクションでいくつかのカスタム関数を試していたところ、驚くべき制限に遭遇しました。基本的に、グローバル パス変数 (例: "root_path") は、RSpec テストの "describe" ブロック内の "it" セクションの "do...end" ブロック内でのみ機能します。
次の詳細は、「it」ブロックの外側では機能せずに「root_path」がそこで機能することを可能にした「it」ブロックの何が特別なのかという質問に要約されると思います。
(回避策を決定しましたが、この動作についてしっかりした説明があるかどうか知りたいです。)
ファイル: spec/requests/static_pages_spec.rb
これは失敗します:
require 'spec_helper'
def check_stable(path)
it "should be stable" do
get path
response.status.should be(200)
end
end
describe "StaticPages" do
describe "Home => GET" do
check_stable(root_path)
end
end
これは成功します:
require 'spec_helper'
describe "StaticPages" do
describe "Home => GET" do
it "should be stable" do
get root_path
response.status.should be(200)
end
end
end
失敗は基本的に次のとおりです。
$ bundle exec rspec spec/requests/static_pages_spec.rb
Exception encountered: #<NameError: undefined local variable or method `root_path' for #<Class:0x00000004cecd78>>
...理由はわかりますか?
これらの2つのスレッドですべての提案を試しました:
Hartl のチュートリアル セクション 5.3.2: Rails Routes
上記の問題を解決するまで、何も機能しませんでした。