2014-03-26 4 views
3

RSVEC에서 true를, 그리고 ROW 및 INDEX에서 do 블록을 사용하여이 CSV Foreach를 헤더로 스텁하는 방법을 알아 보려고 하루 종일 보냈습니다. 나는 몇 가지 시도했는데 작동하지 않는 것 같습니다.rspec stub CSV Foreach with headers : true

이는 RSpec에에 그럼 내 모델

class Test 

    def self.import(file_path) 
    CSV.foreach(file_path, headers: true) do |row, index| 
    Here the rest of the code to create/insert record 
    end 
    end 

end 

, 나는 방법이 몇 가지 시도 :

describe "Class" do 
    context "successfully insert" do 
    let(:data) { "name,lastname\nHero,SuperHero}" } 

    before do 
     # CSV foreach Stub here 
     CSV.stub(:foreach).with("file_path", headers: true).and_return(data) 
    end 

    it "inserts new record" do 
     expect do 
     Test.import("file_path") 
     end.to change(Test, :count).by(1) 
    end 
    end 
end 

을 그리고 그것은 그냥 CSV의 데이터를 반환합니다 작동하지 않습니다. foreach (file_path, headers : true)하지만 'do 블록'으로 이동하지는 않습니다.

이 문제에 어떤 도움,

는 당신에게 당신이 여기 and_yield 대신 and_return를 사용할 필요가 있다고 생각

+0

*로 무엇을 의미합니까?하지만 '차단'*으로 이동하지 않으시겠습니까? –

+1

정확하게 당신이 찾고있는 것을 말할 수 있습니까? 그것은 당신이보고있는 것처럼'data'를 반환해야합니다. 이유는 당신이 메소드를 stubbed했기 때문에 실제 메소드를 호출하지 않으며, 같은 이유'do..end'도 실행되지 않습니다. –

답변