Ruby on rails RSpec请求测试-在使用模拟发送请求之前分配更改值

Ruby on rails RSpec请求测试-在使用模拟发送请求之前分配更改值,ruby-on-rails,ruby,rspec,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(:accoun

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

当我检查处理此请求的方法中的值时,它显示
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
在发送一些之前,您知道如何更改值吗

==更新(2016年11月17日)=========== 主要问题是如何有效地更改模拟值?

我可以为每个人写一些类似的东西

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

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

您的
mock\u webhook\u事件
只是一个mock,一个对正确调用的伪响应。您试图做的是动态更改模拟响应,就像它是实际对象一样

更好的方法(尽管稍微详细一些)是为值使用变量

   let(:closed_response) {false}

   let(:event){ StripeMock.mock_webhook_event('invoice.created', {
    closed: closed_response
  }) }
然后在你的测试中

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

您的
mock\u webhook\u事件
只是一个mock,是对正确调用的伪响应。您试图做的是动态更改模拟响应,就像它是实际对象一样

更好的方法(尽管稍微详细一些)是为值使用变量

   let(:closed_response) {false}

   let(:event){ StripeMock.mock_webhook_event('invoice.created', {
    closed: closed_response
  }) }
然后在你的测试中

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

你能分享你想写测试的代码吗?你能分享你想写测试的代码吗?谢谢你的回答!但我还是得到了同样的结果<代码>错误值。您是否在
关闭\u响应
分配之前引用
事件
?引用后,
:closed
的值将锁定。您应该将
closed\u response=true
设置为测试的第一行。
closed\u response
赋值位于测试块行的顶部。如果您更改
let,测试是否正常(:closed…
默认为true?这可能是测试或代码中的问题。谢谢你的回答!但我仍然得到相同的结果…
false
值。你是否在
closed\u响应之前引用
事件
赋值?一旦引用它,
:closed
的值就会被锁定。你应该设置e> closed_response=true
作为测试的第一行。
closed_response
分配位于测试块的行顶部。如果将
let(:closed…
更改为默认值,测试是否正常?这可能是测试或代码中的问题。