运行我的控制器测试时,出现此错误:
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 :(得分: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'
}