【发布时间】:2016-03-02 18:20:20
【问题描述】:
我正在为仅以 JSON 响应的控制器创建 RSpec 测试文件。 它的工作是将Service对象序列化为JSON对象,效果很好。
当我为控制器创建测试时,我注意到它一直失败,因为响应 JSON 的精度与 Rails 生成的精度不同。
describe "getting a service detail" do
it "should succeed when a valid id is supplied" do
service = create(:service, user: user)
get( :show, id: service.id, format: :json )
expect(response).to have_http_status(200)
result = JSON.parse(response.body)
expect(result).to_not be_nil
expect(result).to eq(service.api_json().to_json)
end
end
api_json 方法与控制器中使用的方法相同,因此它们应该相等。但是,浮点字段的精度不同:
"latitude":73.1379129975533,"longitude":170.75011612037 # Controller Response
"latitude":73.13791299755334,"longitude":170.75011612037048 # RSpec comparison
这是控制器输出对象的方式:
def show
begin
@service = @api_user.services.includes(task: :address).find(params[:id])
respond_with @service do |format|
format.json { render json: @service.api_json }
end
rescue ActiveRecord::RecordNotFound
render nothing: true, status: 404
end
end
如您所见,没有什么特别之处:没有任何地方设置精度。
我尝试直接比较响应的正文也无济于事。
请有人指点我正确的方向,好吗?谢谢。
【问题讨论】:
标签: ruby-on-rails json ruby-on-rails-4 rspec