2016-09-17 1 views
0

Работа с AWS SDK на S3 Ковши и тестирование с помощью Rspec, я натолкнулся на эту ошибку постоянно, хотя я внес много изменений.AWS SDK: NoMethodError: неопределенный метод `put_object 'в Rspec Тестирование

Вот код.

Flow.rb

require 'S3Ops.rb' 
require 'aws-sdk' 

def putzip(s3,bucket,instance) 
    y=File.size('TestZip.zip') 
    puts "File size of the test zip is #{ y.to_s}" 
    File.open('TestZip.zip','rb') do |file| 
    s3.put_object(bucket: bucket, key: instance+'/Test.zip', body: file) 
    end 
    [email protected]_bucket.list_objects({bucket: @bucket_name}) 
    z = result.contents[0].size 
    puts 'File size of Uploaded file is ' + z.to_s 
end 

describe 'Test' do 
    before(:all) do 
    bucket_name = 'testbucket' 
    instance_name = 'testinstance' 
    s3 = S3Ops.new 
    putzip(s3, bucket_name, instance_name) 
    end 

    **example tests** 
end 

S3Ops.rb

require 'aws-sdk' 

class S3Ops 
    def initialize 
    @s3 = Aws::S3::Client.new(region: 'ap-southeast-1') 
    end 

**other functions** 
end 

Ошибка

Failure/Error: s3.put_object(bucket: bucket, key: instance + '/Test.zip', body: file)  
NoMethodError: 
    undefined method `put_object' for #<S3Ops:0x000000020707e0> 

Я даже пытался глобализирующемся все ва riables для увеличения объема и повторной инициализации операций s3 внутри этой функции.

require 'S3Ops.rb' 
require 'aws-sdk' 

def putzip(s3,bucket,instance) 
    y=File.size('TestZip.zip') 
    puts "File size of the test zip is #{ y.to_s}" 
    s3 = S3Ops.new 
    File.open('TestZip.zip','rb') do |file| 
    s3.put_object(bucket: bucket, key: instance+'/Test.zip', body: file) 
    end 
    [email protected]_bucket.list_objects({bucket: @bucket_name}) 
    z = result.contents[0].size 
    puts 'File size of Uploaded file is ' + z.to_s 
end 

describe 'Test' do 
    before(:all) do 
    @bucket_name = 'testbucket' 
    @instance_name = 'testinstance' 
    @s3 = S3Ops.new 
    putzip(@s3, @bucket_name, @instance_name) 
    end 

    **example tests** 
end 

По-прежнему он показал ту же ошибку. Какие изменения необходимы для исправления ошибок?

Редактировать

Он отлично работает в примерах испытаний, как показано ниже

it 'checks for zip' do 
    result = @s3.list_objects(bucket: bucket) 
    puts result.contents[0].key 
end 

Output: TestZip.zip

+0

Извините, я понял свою ошибку и закрыл это. –

ответ

0

То, как я начала S3Ops был неправ, и не было никакого оператора возврата, чтобы дать указатель обратно в Поток. Следовательно, соединение S3 не срабатывало.

Я исправил его и его работу сейчас.

+0

Вместо этого я должен был инициализировать AWS S3 Client. –