У меня нет большого опыта работы с stubbing, и у меня возникают проблемы с запросами на Braintree с использованием webmock и braintree-rails.Webmock: как подделать gzip-ответ?
спецификации/spec_helper.rb
RSpec.configure do |config|
config.include(ConnectionHelper)
config.before(:each) do
stub_request(:post, /.*braintree.*/).
with(braintree_hash).to_return(gzipped_response)
end
end
спецификации/поддержка/connection_helper.rb
def gzipped_response
{
status: 200,
body: "\u001F\x8B\b\0:\x87GU\0\u0003\u0003\0\0\0\0\0\0\0\0\0",
headers: {}
}
end
def braintree_hash
{ :body => /.*/,
:headers => {'Accept'=>'application/xml', 'Content-Type'=>'application/xml',
'User-Agent'=>'Braintree Ruby Gem 2.42.0 (braintree-rails-1.4.0)',
'X-Apiversion'=>'4'}
}
end
Rspec ошибка:
2) Content: when ordering content show page has relevant information
Failure/Error: click_button "Order"
Braintree::UnexpectedError:
expected a gzipped response
# ./app/classes/payment.rb:13:in `generate_token'
# ./app/controllers/posts_controller.rb:44:in `pay'
# ./spec/features/content_spec.rb:251:in `block (4 levels) in <top (required)>'
Я пытаюсь проверить страницу, не сами платежи, однако при рендеринге страницы нужно сначала извлечь токен, и поэтому я получаю эту ошибку.
Как я могу придумать фальсификацию ответа gzip или, наоборот, пропустить все, что связано с запросами Braintree в моих тестах?
приложение/контроллеры/posts_controller.rb
def pay
@post = Post.find(params[:id])
@client_token = Payment.new(current_user).generate_token
end
приложение/классы/payment.rb
class Payment
def initialize(customer)
@customer = customer
@customer_id = @customer.id
end
def generate_token
Braintree::ClientToken.generate(customer_id: @customer_id)
end
end
Не мог бы вы добавить 'PostsController # pay'? – max
@papirtiger Я добавил код для 'controller', но есть и другие методы' Payment', которые я буду использовать здесь и там, например 'create_customer' и' customer_subscription', которые, вероятно, будут вызывать ту же ошибку из-за 'gzipped response '. –