2016-05-23 3 views
1
config.before(:each) do 
    stub_request(:post, "https://api.3rdpartysmsprovider.com/send.php?body=This%20is%20a%20test%20message&destination=6&dlr='1'&output=json&password=0000000&reference=#{@text.sms_uid}&sender=silver&username=0000000"). 
    to_return(:status => 200, :body => "01", :headers => {}) 
end 

J'écris actuellement des spécifications pour une classe de service qui envoie un SMS et crée un journal de celui-ci dans notre base de données. J'essaye de talonner cette demande, cependant @text.sms_uid est un code aléatoire SecureRandom.urlsafe_base64. Aussi, je suis en train de cogner dans config.before(:each). Pour cette raison, je ne peux pas spécifier sms_uid dans stub_request car le sms_uid aléatoire est généré après l'appel de l'embase. Cela provoque l'échec du test à chaque fois. Existe-t-il un moyen de remonter la requête après avoir généré le code (en d'autres termes, après avoir traversé la méthode spécifique) ou existe-t-il un moyen de contourner toutes les requêtes passant par le domaine "https://api.silverstreet.com"?Comment effectuer un talonnement de requêtes sur un domaine ou après une méthode?

+0

Quel fichier de spécifications avez-vous ajouté? –

Répondre

0

Je vois deux options:

  • Stub SecureRandom.urlsafe_base64 pour retourner une chaîne connue et utiliser cette chaîne connue lorsque vous stub_request:

    config.before(:each) do 
        known_string = "known-string" 
        allow(SecureRandom).to receive(:known_string) { known_string } 
        stub_request(:post, "https://api.3rdpartysmsprovider.com/send.php?body=This%20is%20a%20test%20message&destination=6&dlr='1'&output=json&password=0000000&reference=#{known_string}&sender=silver&username=0000000"). 
        to_return(status: 200, body: "01", headers: {}) 
    end 
    

    Si SecureRandom.urlsafe_base64 est utilisé dans d'autres endroits dans votre application, vous devrez le talonner uniquement dans les spécifications où cette requête est générée.

  • Oui, vous pouvez tout bouchonner POST à ​​ce nom d'hôte

    stub_request(:post, "api.3rdpartysmsprovider.com"). 
        to_return(status: 200, body: "01", headers: {}) 
    

    ou même toute demande d'aucune sorte à ce nom d'hôte

    stub_request(:any, "api.3rdpartysmsprovider.com"). 
        to_return(status: 200, body: "01", headers: {}) 
    

    et webmock has a very large number of other ways to match requests.

+1

Hey merci pour la réponse! Je n'avais aucune idée que je pourrais engager SecureRandom. Quoi qu'il en soit, j'ai réussi à le résoudre en utilisant regex 'stub_request (: post,% r {https://api.3rdpartysmsprovider.com}). to_return (: status => 200,: body => "01",: headers => {}) ' qui est essentiellement ' stub_request (: après, "api.3rdpartysmsprovider.com"). to_return (status: 200, corps: "01", en-têtes: {}) ' sauf pour une raison quelconque l'avoir écrasé comme une chaîne n'a pas fonctionné pour moi –