RSpec请求测试 - 在使用mock发送请求之前分配更改值

时间:2016-11-17 09:41:59

标签: ruby-on-rails ruby rspec

我刚刚注意到在设置默认值后,在请求之前无法更改值。

当我检查处理此请求的方法中的值时,它会显示event.data.object.closed = false

以下代码只是一个例子。

require 'rails_helper'

describe "stripe_invoice_created_webhook", type: :request do

  let(:invoice){ create(:invoice, account_id: account.id) }
  let(:account){ create(:account,
                        stripe_customer_id: event.data.object.customer)}
  let(:event){ StripeMock.mock_webhook_event('invoice.created', {
    closed: false
  }) }

  it 'responds 200 to invoice_created webhook with valid endpoint' do
    event.data.object.closed = true
    post '/stripe-events', event.as_json
    expect(response.status).to eq 200
  end    
end

任何想法如何在发送一些

之前改变价值

=== update(2016年11月17日)===========

主要问题是如何有效地更改模拟值?

我可以为每个人写点什么。

event = StripeMock.mock_webhook_event('invoice.created', {closed: true } )

它有效,主要问题是如何像往常一样使let(:foo)更清洁?

1 个答案:

答案 0 :(得分:0)

你的mock_webhook_event只是一个模拟,对正确呼叫的伪响应。你要做的是动态地改变模拟响应,好像它是实际的对象。

更好(尽管稍微冗长一点)将使用变量作为值

   let(:closed_response) {false}

   let(:event){ StripeMock.mock_webhook_event('invoice.created', {
    closed: closed_response
  }) }

然后在你的测试中...

closed_response = true
post '/stripe-events', event.as_json