2016-09-17 5 views
0

S3 버킷에서 AWS SDK로 작업하고 Rspec으로 테스트 할 때 변경 사항이 많았지 만이 오류는 계속 발생했습니다.AWS SDK : NoMethodError : Rspec 테스트에서 put_object가 정의되지 않았습니다.

다음은 코드입니다.

는 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는 scope를 증가시키고 이와 같은 함수 내에서 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가 잘못 시작 된 방법은 아래 그림과 다시 포인터를 제공 할 return 문이 없었다 그것은 예를 테스트에서 잘 작동 흐름. 따라서 S3 연결에 실패했습니다.

나는 그것을 바로 잡았다.

+0

대신 AWS S3 클라이언트를 초기화해야합니다. –

관련 문제