Comment tester ce code avec RSpec ?
-
10-12-2019 - |
Question
J'ai la classe simple et la méthode HTTParty suivantes :
class Token
require 'httparty'
include HTTParty
base_uri 'https://<some url>'
headers 'auth_user' => 'user'
headers 'auth_pass' => 'password'
headers 'auth_appkey' => 'app_key'
def self.getToken
response = get('/auth/token')
@token = response['auth']['token']
end
end
je sais que ça marche car je peux appeler la méthode dans la console Rails et réussir à récupérer un jeton.
Comment puis-je tester le code ci-dessus dans RSpec ?
Ma première tentative ne fonctionne pas :
describe Token do
before do
HTTParty.base_uri 'https://<some url>'
HTTParty.headers 'auth_user' => 'user'
HTTParty.headers 'auth_pass' => 'password'
HTTParty.headers 'auth_appkey' => 'app_key'
end
it "gets a token" do
HTTParty.get('auth/authenticate')
response['auth']['token'].should_not be_nil
end
end
Ça dit: NoMethodError: undefined method 'base_uri' for HTTParty:Module
...
Merci!
La solution
Puisque vous testez un module, vous pouvez essayer quelque chose comme ceci :
describe Token do
before do
@a_class = Class.new do
include HTTParty
base_uri 'https://<some url>'
headers 'auth_user' => 'user'
headers 'auth_pass' => 'password'
headers 'auth_appkey' => 'app_key'
end
end
it "gets a token" do
response = @a_class.get('auth/authenticate')
response['auth']['token'].should_not be_nil
end
end
Cela crée une classe anonyme et l'étend avec HTTPparty
Les méthodes de classe de .Cependant, je ne suis pas sûr que la réponse reviendra telle que vous l'avez reçue.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow