Se avete dei controller che generano chiamate JSON, vi sarete resi conto che i test non sono in grado di analizzarne i dati.
Il problema puo’ essere ovviato usando ActiveSupport::JSON.decode sul response.body.
Per poter utilizzarlo all’interno di tutte le classi editiamo il file test/test_helper.rb ed all’interno della classe ActionController::TestCase inseriamo il seguente codice:
def json
ActiveSupport::JSON.decode @response.body
end
A questo punto possiamo procede a scrivere il nuovo test. Supponendo che il nosto metodo index all’interno del controller si presenti come segue:
def index
respond_to do |format|
format.html
format.json { render json: UserDatatable.new(view_context) }
end
end
Affiancheremo al generico functional test:
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:user)
end
il test che copre la parte JSON come segue:
test "should get JSON index " do
get :index , :format => :json
assert_response :success
assert_not_nil assigns(:user).to_json, @response.body
end
Vi invito a leggere la doc sui metodi encode e decode che trovate qui’,