如何使用stub_request模拟对站点的所有请求?

时间:2018-12-10 16:18:10

标签: ruby-on-rails ruby regex rspec mocking

我想在我的rspec测试中使用stub_reuest模拟对给定站点的所有请求...不仅仅是我今天知道的URL。特别是,我想提出一个异常或超时来模拟REST服务离线或损坏。

如何仅对一个站点的所有URL进行匹配?如何阻止给定主机的任何URL?

1 个答案:

答案 0 :(得分:0)

使用:any来匹配所有方法,并使用正则表达式来匹配所有URL:

their_site = 'http://rest.example.com'
stub_request(:any, /#{their_site}.*/ ).to_raise(Errno::ECONNREFUSED)

their_site = 'https://rest.example.com:443/api'
stub_request(:any, %r[#{their_site}.*] ).to_timeout

stub_request(:any, %r[#{their_site}.*] )
  .to_return(status: 500, body: 'Sorry, mate.')

stub_request(:any, %r[#{their_site}.*] )
  .to_return(status: 404)

stub_request(:any, %r[#{their_site}.*] )
  .to_return(status: 200, 'We tried our best.')

如果您想破坏所有个外部匹配,可以使用正则表达式来实现:

stub_request(:any, /.*/ ).to_timeout