Rspec、Paperclip 和 Rails - fixture_file_upload 的规格作为单独的,而不是成组的
Rspec, Paperclip and Rails - spec with fixture_file_upload works as single, not in group
我有一个规范,当 运行 单独通过时,但是当我 运行 它作为测试目录或我的整个套件的一部分时,它失败了。
规格:
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
的 fog 方法,似乎表明它无法加载 file/file 的内容。
我觉得好像我一定遗漏了一些明显的东西,为什么这个测试会自己通过,而不是作为 suite/group 的一部分。
我是 Rspec 的新手,因为它涉及到 to/handles 上传的文件,我不知道从哪里开始(我用谷歌搜索了这个但发现很少)。
我认为你提到的 copy_to_local_file
是当回形针试图使用 for 与 S3 交谈时。这在生产环境中很好,但可能不是您在测试中想要的。
如果您将 Fog.mock = true
添加到您的测试设置中,它将在本地创建一个模拟版本的 S3,可以对其进行操作。然后您可以在您的测试设置中保存关联模型的副本(它将在内存中实例化此 "file"),然后它应该是您可以读回的内容。
希望对您有所帮助!
我有一个规范,当 运行 单独通过时,但是当我 运行 它作为测试目录或我的整个套件的一部分时,它失败了。
规格:
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
的 fog 方法,似乎表明它无法加载 file/file 的内容。
我觉得好像我一定遗漏了一些明显的东西,为什么这个测试会自己通过,而不是作为 suite/group 的一部分。
我是 Rspec 的新手,因为它涉及到 to/handles 上传的文件,我不知道从哪里开始(我用谷歌搜索了这个但发现很少)。
我认为你提到的 copy_to_local_file
是当回形针试图使用 for 与 S3 交谈时。这在生产环境中很好,但可能不是您在测试中想要的。
如果您将 Fog.mock = true
添加到您的测试设置中,它将在本地创建一个模拟版本的 S3,可以对其进行操作。然后您可以在您的测试设置中保存关联模型的副本(它将在内存中实例化此 "file"),然后它应该是您可以读回的内容。
希望对您有所帮助!