4

頻繁に使用されるテスト用にいくつかのコントローラー マクロを追加して、RSpec の例をドライアップしようとしています。このやや単純化された例では、ページを取得した結果が別のページに移動するかどうかを単純にテストするマクロを作成しました。

def it_should_redirect(method, path)
  it "#{method} should redirect to #{path}" do
    get method
    response.should redirect_to(path)
  end
end

私はそれを次のように呼ぼうとしています:

context "new user" do
  it_should_redirect 'cancel', account_path
end

テストを実行すると、account_path を認識しないというエラーが表示されます。

未定義のローカル変数またはメソッド `account_path' for ... (NameError)

RSpec の名前付きルートに関するこの SO スレッドで指定されたガイダンスに従って Rails.application.routes.url_helpers を含めようとしましたが、それでも同じエラーが発生します。

名前付きルートをパラメーターとしてコントローラー マクロに渡すにはどうすればよいですか?

4

1 に答える 1

4

に含まれる URL ヘルパーは、例 (またはconfig.include Rails.application.routes.url_helpersで設定されたブロック) 内でのみ有効です。サンプル グループ (context または describe) 内では使用できません。シンボルを使用してみてください。代わりに、次のようなものですitspecifysend

# macro should be defined as class method, use def self.method instead of def method
def self.it_should_redirect(method, path)
  it "#{method} should redirect to #{path}" do
    get method
    response.should redirect_to(send(path))
  end
end

context "new user" do
  it_should_redirect 'cancel', :account_path
end

config に url_helpers を含めることを忘れないでください。

または例の中のマクロを呼び出します:

def should_redirect(method, path)
  get method
  response.should redirect_to(path)
end

it { should_redirect 'cancel', account_path }
于 2013-01-13T17:56:04.620 に答える