Как я могу rspec проверить контроллер с маршрутизацией - PullRequest
4 голосов
/ 17 февраля 2011

Для получения списка анкет я использую

GET "/questionnaires/user/1/public/true/mine/true/shared/true"

в route.rb у меня

/questionnaires/*myparams(.:format)  {:controller=>"questionnaires", :action=>"list"}

Контроллер использует маршрутизацию для создания запроса в списке метода

class QuestionnairesController < ApplicationController
  before_filter :authenticate  

  def list  
    myparams = params[:myparams].split("/").to_h
  end

  # ...
end

Я пытаюсь создать контрольные примеры для всех параметров в файле спецификации

describe "GET list" do  
  it "returns the list of questionnaires for the user" do  
    get :list  
    # ...  
  end
end

когда я запускаю rspec, я получаю

Failures:

1) QuestionnairesController List GET list returns the list of questionnaires for the user
  Failure/Error: get :list
  No route matches {:controller=>"questionnaires", :action=>"list"}
  # ./spec/controllers/questionnaires_controller_spec.rb:20

Вопрос в том, как написать файл спецификаций для передачи слитых параметров rspec. Мне нравится делать что-то вроде этого:

describe "GET list" do 
  it "returns the list of questionnaires for the user" do
    get :list, "/user/1/public/true/mine/true/shared/true"  
  end
end

и измените параметры для проверки различных случаев

1 Ответ

1 голос
/ 17 февраля 2011

Глобализация происходит в диспетчере, поэтому параметры уже назначаются при вызове контроллера. Когда действие контроллера достигнуто, параметры в глобусе должны быть разбиты на массив в params[:myparams].

Если вы хотите проверить это в контроллере, просто настройте хэш параметров так, как диспетчер:

describe "GET 'list'" do
  it "should be successful" do
    get :list,  :myparams => "user/1/public/true/mine/true/shared/true".split("/")
    response.should be_success
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...