2015-09-13 3 views
0

При запуске моего теста контроллера контроллера RSpec, я получаю эту ошибку:Неопределенный метод ROUTE_NAME в тесте

NoMethodError: 
    undefined method `api_challenge_url' for #<Api::V1::ChallengesController:0x007f829b233460> 

, которые, по сути, не маршрут, который существует. Мои маршруты файл выглядит следующим образом:

namespace :api, { format: :json, constraints: { subdomain: 'api' }, path: '/'} do 
scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do 
    resources :users, only: [:show, :create, :update, :destroy] do 
    resources :challenges, only: [:create, :show] 
    end 
end 
end 

И мой тестовый контроллер выглядит следующим образом:

RSpec.describe Api::V1::ChallengesController, type: :controller do 

describe "POST #create" do 
context "when successfully created" do 

    before(:each) do 
    @user = FactoryGirl.create(:user) 
    @challenge_attributes = FactoryGirl.attributes_for(:challenge) 
    post :create, user_id: @user.id, challenge: @challenge_attributes, format: :json 
    end 

    it "should render the JSON for the created challenge" do 
    challenge_response = JSON.parse(response.body, symbolize_names: true) 
    expect challenge_response[:description].to eql @challenge_attributes["description"] 
    expect challenge_response[:title].to eql @challenge_attributes["title"] 
    end 
end 
end 

end 

Но для жизни меня, я не могу, почему он звонит неправильное название маршрута. Выход соответствующей части rake routes выглядит следующим образом:

api_user_challenges POST /users/:user_id/challenges(.:format)  api/v1/challenges#create {:subdomain=>"api"} 

Я попробовал несколько различных форматов в методе post, есть некоторые идиоматических способ сделать это, что я не хватает?

ответ

0

Попробуйте добавить некоторую конфигурацию, чтобы включить URL-адрес хелперы в свой набор тестов:

RSpec.configure do |c| 
    c.include Rails.application.routes.url_helpers 
    # Other configurations ... 
end 

А если вы предпочитаете использовать xxx_url над xxx_path, помните конфиг action_controller.default_url_options в вашем config/environments/test.rb, например:

config.action_controller.default_url_options = { 
    host: 'www.mysite.org', 
    protocol: 'https' 
} 
+0

Я включил его, и никаких изменений не было. Я действительно запутался в том, почему он пытается использовать api_challenge_url, похоже, что он не просматривается должным образом, но я чувствую, что следую правильному шаблону. – sp33k3rph433k

Смежные вопросы