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
를 사용할 필요가 있다고 생각
*로 무엇을 의미합니까?하지만 '차단'*으로 이동하지 않으시겠습니까? –
정확하게 당신이 찾고있는 것을 말할 수 있습니까? 그것은 당신이보고있는 것처럼'data'를 반환해야합니다. 이유는 당신이 메소드를 stubbed했기 때문에 실제 메소드를 호출하지 않으며, 같은 이유'do..end'도 실행되지 않습니다. –