2016-09-17 13 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> 

私も、すべてのVAをグローバル化しようとしましたこのような関数の範囲内で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 

それでも同じエラーが表示されました。エラーを修正するためにはどのような変更が必要ですか?

編集

私はS3Opsを開始した方法が間違っていたとバックへのポインタを与えるために何もreturn文がありませんでした

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

Output: TestZip.zip

+0

私は間違いを理解し、これを閉じました。 –

答えて

0

下に示すように、それは例のテストで正常に動作しますフロー。したがって、S3接続に失敗しました。

私はそれを修正し、現在作業中です。

+0

代わりにAWS S3クライアントを初期化しておく必要があります。 –

関連する問題