Rspec,Paperclip和Rails - 与fixture_file_upload的规范作为单个,而不是组

时间:2015-02-05 19:36:46

标签: ruby-on-rails rspec fog

我有一个在自己运行时通过的规范但是,当我将它作为测试目录或我的整个套件的一部分运行时,它失败了。

规范

WebMock.disable!

describe MembersUpload::ParseSpreadsheet do

  let(:client) { create(:client) }
  let(:members_upload) { create(:members_upload, client: client) }

  context 'parsing an uploaded spreadsheet' do
    it 'should parse the spreadsheet and add rows' do
      MembersUpload::ParseSpreadsheet.call(client.id, members_upload.id)
      members_upload.reload
      expect(members_upload.spreadsheet_rows).to be > 0
    end
  end

end

工厂

FactoryGirl.define do  

  factory :members_upload do
    association :client
    ignore_duplicates false
    send_welcome_letters false
    spreadsheet_rows 0
    total_added 0
    invalid_percent 0
    disallowed_percent 0
    unknown_percent 0
    accept_all_percent 0
    invalid_violation false
    disallowed_violation false
    status 'scheduled'
    approved false
    approve_by Date.today + 14.days
    approval_type 'client'
    spreadsheet { fixture_file_upload "#{Rails.root}/spec/fixtures/member_uploads/members-uploads-samples-good.csv", 'text/csv' }
  end
end

当作为套件或测试组的一部分运行时,我收到以下错误:
NoMethodError: undefined method body for nil:NilClass

错误本身指向一个名为copy_to_local_file的{​​{3}}方法,似乎表明它无法加载文件/文件的内容。

我觉得我必须遗漏一些明显的东西,为什么这个测试会自行传递,而不是作为套件/组的一部分。

我是Rspec的新手,因为它涉及到/处理上传的文件,并且难以从哪里开始(我用谷歌搜索但发现很少)。

1 个答案:

答案 0 :(得分:0)

我认为你提到的copy_to_local_file就是回形针试图用来与S3交谈的时候。在生产环境中这很好,但可能不是你想要的测试。

如果您将Fog.mock = true添加到测试设置中,它将在本地创建一个可以对其进行操作的模拟S3版本。然后你可以在你的测试设置中保存相关模型的副本(它将在内存中实例化这个"文件"然后它应该是你可以读回的东西。

希望有所帮助!