Как заглушки запросов на домене или после метода?
config.before(:each) do
stub_request(:post, "https://api.3rdpartysmsprovider.com/send.php?body=This%20is%20a%20test%20message&destination=60123456789&dlr='1'&output=json&password=0000000&reference=#{@text.sms_uid}&sender=silver&username=0000000").
to_return(:status => 200, :body => "01", :headers => {})
end
В настоящее время я пишу спецификации для класса обслуживания, который отправляет SMS и создает журнал этого в нашей базе данных. Я пытаюсь заглушить этот запрос, однако @text.sms_uid
это SecureRandom.urlsafe_base64
случайный код. Тоже втыкаю config.before(:each)
,
Из-за этого я не могу указать sms_uid
в stub_request
как случайный sms_uid
генерируется после вызова заглушки. Это приводит к тому, что тест не проходит каждый раз. Есть ли способ, которым я могу заглушить запрос после того, как он генерирует код (другими словами, после того, как он проходит через определенный метод), или есть способ заглушить все запросы, проходящие через домен? " https://api.silverstreet.com/"?
1 ответ
Я вижу два варианта:
огрызок
SecureRandom.urlsafe_base64
вернуть известную строку и использовать эту известную строку, когда вы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=60123456789&dlr='1'&output=json&password=0000000&reference=#{known_string}&sender=silver&username=0000000"). to_return(status: 200, body: "01", headers: {}) end
Если
SecureRandom.urlsafe_base64
используется в других местах вашего приложения, вам нужно будет заглушить его только в спецификациях, где генерируется этот запрос.Да, вы можете поставить любой POST на это имя хоста
stub_request(:post, "api.3rdpartysmsprovider.com"). to_return(status: 200, body: "01", headers: {})
или даже любой запрос к этому имени хоста
stub_request(:any, "api.3rdpartysmsprovider.com"). to_return(status: 200, body: "01", headers: {})
и у webmock есть очень много других способов сопоставления запросов.