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 为零。

@url.rewrite(rewrite_options(options))

似乎 @url 在这里初始化:

def initialize_current_url
  @url = UrlRewriter.new(request, 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

url_for 失败,因为它发生在获取之前。解决问题的最简单方法是在测试中对 URL 进行硬编码(即更改url\_for(@mock\_group)"http://test.host/group/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 回答