我只想测试一个控制器方法正在传递一个int。
测试:
it 'responds successfully with mocked fto hours remaining' do
get :fto_hours_remaining, {}, { "Accept" => "application/json" }
json = JSON.parse(response.body)
expect(json['hours_remaining']).to be_100
end
控制器方法(我也尝试了注释掉的块):
def fto_hours_remaining
@fto_hours_remaining = 100
render json: @fto_hours_remaining
# respond_to do |format|
# format.json { render :json => {:hours_remaining => @fto_hours_remaining} }
# end
end
我收到错误:JSON::ParserError: 757: unexpected token at '100'
,错误指向json = JSON.parse(response.body)
有人看到错误吗?感谢。
答案 0 :(得分:1)
所以你的控制器中有正确的版本:
def fto_hours_remaining
@fto_hours_remaining = 100
render :json => { :hours_remaining => @fto_hours_remaining }
end
您的操作现在只渲染字符串100
这是无效的json。
尝试irb:
=> require 'json'
=> true
=> JSON.parse "100"
=> JSON::ParserError: 757: unexpected token at '100'
render( json: { hours_remaining: @fto_hours_remaining } )
表示以json
格式呈现我应该有效的散列{ hours_remaining: @fto_hours_remaining }
json:
{
"hours_remaining": 100
}
你的考试:
# return string "100"
number = json['hours_remaining']
# fails beacause "100" != 100
expect(json['hours_remaining']).to be_100
# try this
expect(json['hours_remaining']).to eq("100")