我如何模拟S3Object.read do | chunk |使用rspec

时间:2016-04-25 14:53:04

标签: ruby-on-rails ruby amazon-s3 rspec streaming

我是ruby和rspec的新手。 我有一个在ruby中与S3交互的模块。 在我的代码中我:

  1. 创建一个新的S3实例:s3 = AWS :: S3.new()
  2. 拿到我的水桶:@ s3bucket = s3.buckets [@bucket]
  3. 检索我的S3Object:object = @ s3bucket.objects [key]
  4. 最后,我将对象保存到本地文件:

    File.open(local_filename, 'wb') do |s3file|
    object.read do |chunk|
      return completed if stop?
      s3file.write(chunk)
    end
    
  5. 我的代码效果很好,但是我对单元测试有问题,
    特别是我在模拟object.read do | chunk |时遇到问题一部分。
    无论我尝试什么,大块都空了。
    有人可以帮忙吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

试试这个:

s3_object = class_double("S3Object")
allow(s3_object).to receive(:read).and_return(<what ever you want>)

如果您需要在测试中存储API响应而不进行多次调用,请查看https://github.com/vcr/vcr

答案 1 :(得分:0)

如果你想嘲笑这个:

create a new S3 instance : s3 = AWS::S3.new()
你做了

allow_any_instance_of(AWS::S3).to_receive(:new).and_return(<the return value of the method>)

您可以按照之前的建议使用录像机,但是如果您在团队中工作并且如果您同时删除了同一个录像带,则会与另一个团队成员同时运行测试时遇到问题。