Scrivere fuctional test in RoR che supportino chiamate JSON

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’,

RoR: Come testare una confirm dialog con Capybara

Capybara rappresenta una delle gemme indispensabili per gli integration test in Ruby on Rails.
Usandolo vi sarete accorti che sembra non esserci modo di gestire le confirm dialog javascript del vostro codice. Tuttavia, se state usando un driver come Selenium che supporti il JS, potete forzare a trueil valore ritornato dal js come segue:


page.evaluate_script('window.confirm = function() { return true; }')
page.click('Destroy')

Learn VIM

Link

Una grande raccolta di documentazione & tutorial su VIM plugin e tutto quello che serve per usarlo con Rails by thoughtbot.

Molte risorse sono a pagamento, ma vale la pena fare un giro sul sito

Learn VIM