【发布时间】:2016-02-17 17:56:02
【问题描述】:
我正在做一个 Rails 应用程序,它主要是一个 API。我正在尝试为我的 API 端点测试控制器。我的 RSpec Controller 测试器如下:
require 'rails_helper'
require 'spec_helper'
require 'rack/test'
require 'devise'
class RoutesControllerTest < ActionController::TestCase
describe "User with token"
test "should post route" do
params = { route: { start_lat: 38.7627951, start_long: -9.1532211,
end_lat: 38.7483783, end_long: -9.155045,
flag_opt: 0.4, city: 1 }
}
post '/routes.json' , params.to_json, format: :json
assert_response :success
end
end
end
我的控制器是:
class RoutesController < ApplicationController
def create
city = City.find(params[:route][:city])
user = current_user
@route = user.routes.new(route_params)
@results = @route.calc_route(@route.start_long, @route.start_lat, @route.end_long, @route.end_lat, params[:route][:flag_opt], city)
if @route.save!
render :template=>"/routes/routes.json.jbuilder", status: 201, :formats => [:json]
else
render json: @route.errors
end
end
private
def route_params
json_params = ActionController::Parameters.new( JSON.parse(request.body.read) )
json_params.require(:route).permit(
:start_lat,
:start_long,
:end_lat,
:end_long,
:flag_opt
)
end
end
但每次我运行 rspec spec/controller 时都会遇到以下错误:
Failure/Error: json_params = ActionController::Parameters.new(JSON.parse(request.body.read) )
JSON::ParserError:
757: unexpected token at 'route%5Bcity%5D=24&route%5Bend_lat%5D=41.26171490000001&route%5Bend_long%5D=-8.38193640000001&route%5Bflag_opt%5D=1&route%5Bstart_lat%5D=38.753225&route%5Bstart_long%5D=-9.144376&route%5Buser_id%5D=24'
这意味着请求不是以 JSON 格式发送的
【问题讨论】:
-
你可以试试这个:
post '/routes', params.to_json, { 'Accept' => Mime::JSON, 'Content-Type' => Mime::JSON.to_s } -
我仍然遇到同样的错误
标签: ruby-on-rails ruby json rspec