1

モデル グループにアクセスするコントローラーの rspec テストを作成しようとしています。

@request.env['HTTP_REFERER'] = group_url(@mock_group) ### 49行目

私はこれを得る:

「作成に応答する ActsController の NoMethodError は :back にリダイレクトする必要があります」
予期していなかったのに nil オブジェクトがあります!
nil.rewrite の評価中にエラーが発生しました
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/base.rb:621:in `url_for'
(eval):17:in `group_url'
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/test_process.rb:464:in `send!'
/Library/Ruby/Gems/1.8/gems/actionpack-2.1.0/lib/action_controller/test_process.rb:464:in `method_missing'

url_for のこの行が問題です。具体的には @url は nil です。

@url.rewrite(rewrite_options(オプション))

そして、 @url はここで初期化されているようです:

def initialize_current_url
  @url = UrlRewriter.new(リクエスト、params.clone)
終わり
4

2 に答える 2

3

これは、url_forがリクエスト処理中に初期化されたものに依存しているために発生します。私はあなたのテストがこのように見えると思います:

it "should do whatever when referrer is group thing" do
  @request.env["HTTP_REFERER"] = url_for(@mock_group)
  get :some_action
  "something".should == "something"
end

getの前に発生するため、url_forは失敗します。この問題を解決する最も簡単な方法は、テストでURLをハードコーディングすることです(つまり、に変更url\_for(@mock\_group)します"http://test.host/group/1")。もう1つのオプションは、url_forを呼び出す前に、@controllerに@urlを初期化させる方法を理解することです。私は以前にそれを行ったことがあると思いますが、私はもう周りにコードを持っておらず、action_controllerのコードを掘り下げる必要がありました。

于 2008-12-05T19:39:12.167 に答える
0

これを見てください。関連性があると思います。

http://jakescruggs.blogspot.com/2008/11/if-you-use-mocha-and-rspec-then-read.html

于 2008-11-26T21:06:32.990 に答える