我有一个在自己运行时通过的规范但是,当我将它作为测试目录或我的整个套件的一部分运行时,它失败了。
规范:
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的新手,因为它涉及到/处理上传的文件,并且难以从哪里开始(我用谷歌搜索但发现很少)。
答案 0 :(得分:0)
我认为你提到的copy_to_local_file
就是回形针试图用来与S3交谈的时候。在生产环境中这很好,但可能不是你想要的测试。
如果您将Fog.mock = true
添加到测试设置中,它将在本地创建一个可以对其进行操作的模拟S3版本。然后你可以在你的测试设置中保存相关模型的副本(它将在内存中实例化这个"文件"然后它应该是你可以读回的东西。
希望有所帮助!