2015-02-05 47 views
1

我有一個規範,當它自己運行時通過,但是,當我運行它作爲測試目錄或我的整個套件的一部分,它失敗。Rspec,回形針和導軌 - 規格與fixture_file_upload作爲單一的,不在組

規格

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

錯誤本身指向到fog方法copy_to_local_file,似乎表明它無法加載文件/文件的內容。

我感覺好像我一定錯過了一些顯而易見的事情,爲什麼這個測試會自行傳遞,而不是套件/組的一部分。

我是Rspec的新手,因爲它涉及到/處理上傳的文件,並且難以理解從哪裏開始(我已經使用了Google,但發現很少)。

回答

0

我想你提到的copy_to_local_file是回形針試圖用於與S3交談。在生產環境中這很好,但可能不是您想要測試的。

如果您將Fog.mock = true添加到您的測試設置中,它將在本地創建一個模擬版本的S3,可以對其進行操作。然後,您可以在測試設置中保存相關模型的副本(將在內存中實例化此「文件」),隨後應該可以將其讀回。

希望有幫助!

+0

謝謝,@geemus。我必須現在就出發,但今晚會嘗試並報告。我很欣賞反饋! – 2015-03-17 21:04:46

+0

可以肯定的是,霧測試的方式需要一點時間才能適應,但是一旦人們習慣它,通常似乎工作得很好。所以希望這也是你的經驗。當你回到這裏時,如果你有更多的問題或疑慮,請告訴我。 – geemus 2015-03-18 16:16:46

+0

再次感謝@geemus併爲延誤道歉......工作進展順利!)。我現在必須對我的整體設置有些不安,因爲當我添加'Fog.mock = true'時,我總是收到上述錯誤。我想我可能需要把這個嚇人的套房分開,然後從那裏開始...... – 2015-03-23 14:26:39