Rails JSON API de test de la requête POST avec PARAMS en JSON
C'est un problème qui me tracasse depuis un certain temps. Je fais construire une fonction de l'API qui doit recevoir les données en json et la réponse en json. Mon contrôleur des tests de fonctionner correctement(Puisque je abstraite que les données y arrive déjà décoder à partir de JSON et que la réponse doit être interprétée ).
Je sais Aussi que la fonction fonctionne très bien depuis que j'utilise curl pour le tester avec des arguments JSON et il fonctionne parfaitement.
(ex: curl -i --en-tête "Accept: application/json" --en-tête "Content-Type: application/json" -d '{"test":{"email":"[email protected]"}}' )
Mais évidemment, je tiens à écrire demande(fonction) des tests pour tester automatiquement et la façon dont je vois qu'ils devraient travailler exactement comme curl, c'est à dire, frappé mon service comme si c'était un appel externe. Cela signifie que je voudrais faire passer les arguments en JSON et de recevoir une réponse. Je suis assez perdu, puisque tous les exemples que je peux voir, les gens traitent les arguments qu'il a déjà été décodé.
Ma question est: je suis une fausse prémisse voulant envoyer de l'argumentation et de la demande, JSON, puisque je vais tester rails fonctionne, parce que c'est sa responsabilité? Mais je voudrais voir comment robustes mon code sa de mauvais arguments et voudrais essayer avec JSON.
quelque chose de ce type:
it "should return an error if there is no correct email" do
params = {:subscription => {:email => "andre"}}
post "/magazine_subscriptions", { 'HTTP_ACCEPT' => "application/json", 'Content-Type' => 'application/json', 'RAW_POST_DATA' => params.to_json }
end
Savez-vous comment est-ce possible? et s'il vous plaît laissez-moi savoir si vous pensez que je suis en train de tester ce mal.
tout le meilleur,
André
OriginalL'auteur andre.orvalho | 2013-09-08
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé ma réponse sur un post ici(RSpec demande de test fusionne les hachages dans la gamme en POST JSON params), je pense que ce que je faisais de mal concernés les arguments de la demande.
donc cela a fonctionné:
post '/magazine_subscriptions', params.to_json, format: :json
.c'est plus élégant
Je ne pense pas que .to_json est nécessaire si vous êtes déjà mise en forme comme un objet json. Je pense qu'il devrait être
post '/magazine_subscriptions', params, format: :json
Ou
post "/magazine_subscriptions.json", params
OriginalL'auteur andre.orvalho
post "/magazine_subscriptions", subscription: subscription_params, format: :json
a été la clé pour moi. Pas deto_json
nécessaire.OriginalL'auteur rbinsztock