2016-04-06 8 views
0

Ich schreibe einen Test für eine Methode, die eine SQL-Abfrage ausführt. Für dieses Projekt benötigen sie die Antwort als JSON. Mein Test ist zu sehen, dass die Abfrage die erwartete Anzahl der Antworten zurückgibt. Ich bin in einen Straßenblock gerannt, da mein Objekt JSON anstelle eines Arrays ist. Wie konvertiere ich den JSON in einen ARRAY?Parse JSON zu einem Array in Rails

test "works" do 
    report = get :method 
    assert_equal 1, report.count 
    end 

NoMethodError: undefined method `count'...

Ich habe versucht, das Hinzufügen array_report = ActiveSupport::JSON.decode(report) aber ich bekomme die folgende Fehlermeldung.

TypeError: no implicit conversion of ActionController::TestResponse into String

Wie kann ich den JSON richtig parsen?

EDIT

def method 
    sql = "SELECT MIN(departure_date), ch_invoice.invoice_id 
    FROM ch_invoice 
    INNER JOIN ch_trip 
    ON ch_invoice.invoice_id = ch_trip.invoice_id 
    WHERE departure_date < SYSDATE 
    AND service_rendered = 0 
    AND paid = 1 
    Group By ch_invoice.invoice_id" 

    report = ActiveRecord::Base.connection.exec_query(sql) 
    render json: report 
    end 

EDIT 2

Probe JSON.parse Code. Dies ist, was die Abfrage mir gibt.

{"min(departure_date)"=>"2015-03-01T00:00:00.000Z", "invoice_id"=>"123catfood"} 
{"min(departure_date)"=>"2015-01-01T00:00:00.000Z", "invoice_id"=>"123dogfood"} 

Antwort

1

JSON.parse <string> ist wahrscheinlich, was Sie hier brauchen. Es könnte wie folgt aussehen:

test "works" do 
    get :method 

    result = JSON.parse(response.body) 

    assert_equal 1, result.count 
end 

Check out "How to unit-test a JSON controller?" und die ActiveSupport JSON documention.

+0

Dies gibt mir eine Zählung für jede Zelle in der Abfrage. Also "Bugs" "Bunny" ist 2, wenn ich möchte, dass es eine ROW von Daten ist. Gedanken darüber, wie das zu beheben ist? – CheeseFry

+0

Könnten Sie ein Beispiel posten JSON.parse (response.body) ist, damit ich sehen kann, woran wir arbeiten? – matt721

+0

Ihr Code ist richtig. Ich habe gerade gemerkt, dass ich das falsche Ding treffe. Ich hatte erwartet, nur meine Beispieldaten von meiner Fabrik zu treffen, aber ich stoße tatsächlich durch meine Datenbank und ziehe Daten. Das ist kein Bueno. – CheeseFry