2016-09-25 1 views
0

Comment puis-je tester réellement cette action du contrôleur, j'ai écrit dans mon PurchasesController:Rails 4: Comment tester Action Controller

protect_from_forgery except: [:hook] 
def hook 
    params.permit! # Permit all Paypal input params 
    status = params[:payment_status] 
    if status == "Completed" 
     @purchase = Purchase.find(params[:invoice]) 
     @purchase.update_attributes(status: status, transaction_id: params[:txn_id], purchased_at: Time.now) 
     @purchase.save! 
     @user = @tool.user 
     @user.earned_money += @tool.price 
     @user.save! 
    end 
    render nothing: true 
end 

de préférence avec ma console Rails?

Routes:

post "/purchases/:id" => "purchases#show" 
post "/hook" => "purchases#hook" 
+0

vous voulez effectuer le test via la console? –

+0

@Shabini Rajadas J'ai pensé que je pourrais passer les paramètres au chemin et vérifier la base de données si cela a fonctionné ... Mais j'ai fait quelque chose de mal. Est-ce possible? – Gugubaight

Répondre

0

Je ne suis pas tout à fait sûr que vous pouvez le tester sur votre console, à moins que vous découpler/abstraire les autres opérations étant effectuées puis vous tester les unités indépendamment. Avec RSpec/Minitest, il vous suffit de créer les enregistrements et de faire une demande de publication sur la route /hook, en passant les paramètres attendus: invoice, txn_id, payment_status. Faites-moi savoir si cela peut vous aider.

1

Vous ne testez pas les contrôleurs via la console de rails.

Les contrôleurs dans Rails répondent aux requêtes HTTP - ils sont instanciés par le composant de routage lorsqu'il correspond à une requête entrante. Ainsi, vous testeriez les contrôleurs en envoyant une requête HTTP et en inspectant la réponse.

Vous pouvez tester manuellement votre automate à l'aide de l'outil de ligne de commande cURL ou du Postman basé sur un navigateur pour envoyer une demande *. Vous pouvez utiliser la console rails pour vérifier les effets secondaires tels que les modifications dans la base de données. Cependant, vous devriez envisager d'utiliser un outil de test automatisé tel que Minitest ou RSpec car tester manuellement votre application est une approche erronée.

+0

* - il existe de nombreux outils pour envoyer des requêtes HTTP. Ce ne sont que deux exemples très populaires. – max

+0

Vous pouvez instancier un contrôleur dans la console, mais cela nécessiterait que vous configuriez une fausse requête et que vous ayez besoin de beaucoup de connaissances sur le fonctionnement des rails et des racks. Vous ne pouvez pas simplement "passer les paramètres au chemin". – max