Следующая функция является действием контроллера и получает данные для обслуживания из корзины AWS S3.
def show
s3_response = Zlib::GzipReader.new(ApiBucket.bucket.object(id).get.body).read
render json: s3_response
end
Я пишу спецификацию для этого метода. Мне нужно заглушить / издеваться так, чтобы s3_response
фактически не запрашивал у s3. Вот что я попробовал. Это не работает, хотя. Пожалуйста, помогите.
describe '#GET show' do
let!(:resource) { create(:resource) }
before do
json_data = Api::V2::Presenter.consume_as_json(resource)
allow_any_instance_of(Zlib::GzipReader).to receive(:read).and_return(json_data)
end
it 'should return the resource in page format' do
get :show, format: :json, params: { id: resource.uuid }
response_body_json = JSON.parse(response.body)
json_data = Api::V2::Presenter.consume_as_json(
Api::V2::ResourcePresenter.new(resource).page,
true
)
expect(response_body_json).to eql(JSON.parse(json_data))
end
end
Я получаю эту ошибку Zlib::GzipFile::Error: not in gzip format