foo_url (mock_foo) иногда не работает в тестах rspec - PullRequest
1 голос
/ 21 ноября 2008

Я пытаюсь написать тест rspec для контроллера, который обращается к модель группы.

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

Я получаю это:

NoMethodError in 'ActsController responding to create should redirect to :back'
You have a nil object when you didn't expect it!
The error occurred while evaluating 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)
end

Ответы [ 2 ]

3 голосов
/ 05 декабря 2008

Это происходит потому, что 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"). Другой вариант - выяснить, как заставить @controller инициализировать @url перед вызовом url_for. Я думаю, что делал это раньше, но у меня больше нет кода, и это связано с копанием кода action_controller.

0 голосов
/ 27 ноября 2008

Посмотри на это. Я думаю, что это актуально.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...