当请求主体不可预测时,stub_request

时间:2015-09-23 10:38:14

标签: ruby-on-rails rspec stubbing

我正在使用stub_request存取http请求。这个http请求基本上是一个松弛的通知,它包含一些随机字符串(例如时间戳)。

所以,我不能只重复使用代码片段rspec吐出来,因为每次执行时身体都不同。有没有可能用例如模式存根请求,或者我被困在例如Slack#ping

干的代码,jic:

突变

class MyMutation < Mutations::Command
  def run
    slack.ping "#{rand (1..1000)}"
  end
end

规范

describe MyMutation do
  # ??? stub_request ???
  it 'succeeded' do
    expect(MyMutation.new.run.outcome).to be_success
  end
end

感谢。

UPD 存根请求:

stub_request(:post, "https://hooks.slack.com/services/SECRETS").
  with(:body => {"payload"=>"{SLACK_RELATED_PROPS,\"text\":\"MY_RANDOM_HERE\"}"},
       :headers => {'Accept'=>'*/*', MORE_HEADERS}).
  to_return(:status => 200, :body => "", :headers => {})

1 个答案:

答案 0 :(得分:5)

您需要使用partial hash matching

stub_request(:post, "https://hooks.slack.com/services/SECRETS").
  with(:body => hash_including("payload"=>"{SLACK_RELATED_PROPS}"),
       :headers => {'Accept'=>'*/*', MORE_HEADERS}).
  to_return(:status => 200, :body => "", :headers => {})

我还建议提供SLACK_RELATED_PROPS作为哈希,而不是json编码的字符串。只需从那里选择一些您真正关心的值,并删除其他所有值,例如随机生成的值。

您可以在request对象上查看文档中的更多功能,例如regex matching甚至dynamic evaluating