вызов конкретного URL в Rspec в интеграционном тесте - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь сделать следующее в rspec (знайте, что у меня не должно быть жестко закодированного значения) в интеграционном тесте:

get '/api/get-other-items?id=5109'

Самое близкое, что я мог найти, было: вызовконкретный URL с rspec , но он выбирает только один элемент.Я пробовал следующее:

get :controller => 'api', :action => 'get-other-items', :id => '5109'
get 'api/get-other-items', :id => '5109'    

Это дает мне bad argument(expected URI object or URI string)

Если я бегу как

get get_other_items, :id => '5109' q

Я получаю

undefined local variable or method `get_other_items' for #<RSpec::Core::ExampleGroup::Nested_1:0x007f938fd65590>

но маршрут существует:

Mon Jan 23$ rake routes | grep get_other_items
get_other_items     /api/get-other-items(.:format)      {:controller=>"api", :action=>"get_other_items"}

Как бы я выполнил это простое получение?

thx

обновление для ответа 1 комментарий вот код rspec, о котором идет речь:

it "testing getting other items for menu item" do
  get get_other_items_path(:id => '5109')
  JSON.parse(response.body)
  puts response.body

понедельник, 23 января $ rspec request / get_other_items_spec.rb

F

Failures:

  1) GetOtherItems testing getting other items for menu item
   Failure/Error: JSON.parse(response.body)
   JSON::ParserError:
   743: unexpected token at 'this is not found          '
     # ./requests/get_other_items_spec.rb:19:in `block (2 levels) in <top (required)>'

Finished in 13.57 seconds
1 example, 1 failure

Failed examples:

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Ваш маршрут не выглядит так, как будто он принимает :id в качестве параметра, если вы хотите отправить :id, я бы ожидал увидеть следующее:

get_other_items /api/get-other-items/:id(.:format)      {:controller=>"api", :action=>"get_other_items"}

Учитывая структуруВаш сгенерированный маршрут Я предполагаю, что вы используете match для определения маршрута (в вашем маршруте нет глагола HTTP).Чтобы исправить это, попробуйте:

match 'api/get-other-items/:id' => 'api#get_other_items'

Если вместо этого вы используете restful маршруты, то похоже, что вы указали маршрут collection, а не member.Маршрут collection не принимает :id и предназначен для возврата множества записей указанного вами типа.Чтобы сделать его member маршрутом, используйте следующее:

resources :api do
  get 'get_other_items', :on => :member
end

Как только вы получите эту работу, вы сможете попробовать следующее в rspec в вашей ApiController спецификации:

get :get_other_items, :id => '5109'

Если ни один из этих вариантов не работает, опубликуйте запись маршрутов, чтобы мы могли попробовать что-то другое.

0 голосов
/ 23 января 2012

Вызов должен быть get get_other_items_path(:id => 5109) - вам нужно добавить path к названию маршрута или url, если вы хотите указать полный URL-адрес вместо относительного пути.

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