2017-06-01 2 views
1

Ich habe eine Ruby (Nicht-Rails) App, die Grape verwendet, um API-Endpunkte zu exponieren. Einer der Endpunkte erfordert einen Parameter, der ein Array von Werten ist, akzeptiert aber ein leeres Array auch:Rspec interpretiert leeres Array als Mangel an Parametern mit Grape

requires :user_ids, type: Array, allow_blank: true 

Das alles funktioniert gut, wenn Sie den Endpunkt manuell Locken oder Postman mit Prüfung - und leeres Array richtig interpretiert als Parameter user_ids: []. Allerdings scheint rspec diesen ganzen Parameter wegzulassen, wenn sein Wert ein leeres Array (nicht-leeres Array perfekt funktioniert natürlich):

let(:params) { { user_ids: [] } } 
let(:route) { post "api/users/remove", params } 

In diesem Fall params, die tatsächlich gleich {} und Trauben der requires Wache Tritte geben bekommen in, der Endpunkt darf nichts ausführen.

Nicht sicher, ob es ein Fehler oder ein Feature ist und wie rspec gezwungen wird, dieses leere Array als Parameter zu übergeben (verhält sich so mit rspec 3.4 und 3.6).

+0

Versuchen Sie es mit 'params.to_json' und setzen header 'CONTENT_TYPE' auf 'application/json' –

+0

https://github.com/ruby -grape/Traube/Ausgaben/723 –

+1

@ BartoszBonisławski yup, alles im Test explizit eingestellt löste das Problem. Bitte mach es eine Antwort und ich werde es als beste markieren;) – Piaskal

Antwort

0

Verwenden params.to_json und setzen header 'CONTENT_TYPE' auf 'application/json'