11

我正在使用 Paperclip 和 S3 进行图像上传,并试图从我的测试套件中剔除对 S3 的调用。我找到了提到做的思想机器人帖子

  a.cover       { a.paperclip_fixture('album', 'cover', 'png') }

但这给了我“错误数量的参数(2 个 4 个)”错误。我尝试将上面的参数切换到一个数组,这消除了原始错误,但给出了一个错误,提示“属性已定义:回形针夹具”。

有没有人能够得到这个工作?另外,理想情况下,我希望将本地文件系统用于开发环境。是否有捷径可寻?

4

8 回答 8

7

好的,我已经解决了基本问题。这(我相信)正如 Eliza 所说,因为我没有使用shoulda(我正在使用rspec 2.6.0and factory_girl 2.1.2)。

这对我有用(Profile有附件的类在哪里):

  Profile.any_instance.stub(:save_attached_files).and_return(true)
  @profile = Factory(:profile)

目前,我在我的示例before方法中拥有此权利。rspec可能有一个更好的地方来放置它。

于 2011-11-28T00:05:23.120 回答
6

使用最新的回形针(来自 github master 分支)和 aws-sdk 版本 2,我通过以下配置解决了我的问题:

require "aws-sdk"
Aws.config[:s3] = {stub_responses: true}

有关更多信息,请查看amazon sdk

于 2016-01-26T08:01:06.147 回答
5

把它放在我的“spec/rails_helper.rb”文件中对我有用:

require 'aws'
AWS.stub!
AWS.config(:access_key_id => "TESTKEY", :secret_access_key => "TESTSECRET")
于 2015-01-31T23:20:15.107 回答
3

你在用应该吗?如果您不应该使用您正在使用的 paperclip_fixture 方法,则可能来自其他地方,因此行为会有所不同。

可能相关:https ://github.com/thoughtbot/paperclip/blob/master/should_macros/paperclip.rb

于 2011-03-02T23:18:03.730 回答
3

其中许多技术似乎不适用于最新的回形针和 S3。最终对我有用的是以下组合:

AWS.config(:access_key_id => "TESTKEY", :secret_access_key => "TESTSECRET", :stub_requests => true)

Mymodel.any_instance.stubs(:save_attached_files).returns(true)

但是,实际上,在许多情况下,您真正​​需要做的只是 AWS :stub_requests,它会实现您想要的。

于 2013-11-05T17:47:33.023 回答
1

这就是我得到这个工作的方式。首先,您必须拥有 fakeweb gem,否则它将失败。您还必须在spec/support/paperclip/[model]/[attachment_name][ext]路径中有一个空文件。

我所做的是从 Paperclip 复制代码并将其粘贴到我的工厂中。我无法让 'paperclip_fixture' 工作。

factory :attachment do
  file do |a|
    # Stubbed  Paperclip attachment from: https://github.com/thoughtbot/paperclip/blob/master/shoulda_macros/paperclip.rb#L68
    # FIX: This was the only way I made this work. Calling the paperclip_fixture directly didn't work.
    # See: http://stackoverflow.com/questions/4941586/stubbing-paperclip-s3-requests-in-specs
    model, attachment, extension = "customer_attachment", "file", "doc"      
    definition = model.gsub(" ", "_").classify.constantize.
                       attachment_definitions[attachment.to_sym]

    path = "http://s3.amazonaws.com/:id/#{definition[:path]}"
    path.gsub!(/:([^\/\.]+)/) do |match|
      "([^\/\.]+)"
    end

    begin
      FakeWeb.register_uri(:put, Regexp.new(path), :body => "OK")
    rescue NameError
      raise NameError, "the stub_paperclip_s3 shoulda macro requires the fakeweb gem."
    end
    base_path = File.join(Rails.root, "spec", "support", "paperclip")
    File.new(File.join(base_path, model, "#{attachment}.#{extension}"))
  end
end
于 2012-01-29T18:26:44.007 回答
1

这就是我在不使用 shoulda 助手的情况下从回形针中存根文件的方式。

before(:each) do 
  @sheet = double('sheet')
  @sheet.stub(:url).and_return(File.join(Rails.root, 'spec','fixtures','files', 'file.xls'))
  active_record_object.stub(:sheet).and_return(@sheet)
end

希望这可以帮助某人。

于 2013-02-20T06:18:09.027 回答
1

在使用 Cucumber & Factory Girl 在 S3 上进行测试回形针之后,我刚刚遇到了将应用程序从 Rails 2.3 升级到 Rails 3.0 的问题。

我没有将 Paperclip::Shoulda 模块包含到 Factory 类中,而是将其包含到 FactoryGirl::DefinitionProxy 类中,所以我更改了这个:

class Factory
  include Paperclip::Shoulda
end

class FactoryGirl::DefinitionProxy
  include Paperclip::Shoulda
end

作为参考,我使用的是回形针 2.4.1 和 factory_girl 2.0.5。

于 2014-03-12T23:23:49.520 回答