rspec의 레이크 작업에서 Date.today.wday를 조롱하려고합니다.레일즈 RSpec이 레이크 작업에서 Date.today.wday를 조롱했습니다.
보석 버전 : RSpec에 2.14.8은 --- 루비 여기에 2.0.0
--- 4.1.1 레일 것은 무엇을 내가해야 할 본질적으로 설명하기 위해 내 테스트의 단순화 된 가짜 버전을 시도하고있다 :
describe "scheduler" do
describe ":thursday_invitations" do
let(:run_issue_invites) do
Rake::Task[:thursday_invitations].reenable
Rake.application.invoke_task :thursday_invitations
end
before do
Rake.application.rake_require 'tasks/scheduler'
Rake::Task.define_task(:environment)
Date.today.should_receive(:wday).and_return(4) ###MY NEMESIS CODE LINE
end
context "on thursday" do
it "issues invitations" do
expect(Date.today.wday).to eq(4) ###THE VERIFICATION TEST THAT KEEPS FAILING
run_issue_invites
expect(<other_stuff_to_test>).to <return_properly>
end
end
end
end
이렇게 실제 키는 Date.today.wday를 조롱합니다. 매주 어떤 요일 에든 내 스펙을 실행할 수 있기를 원하기 때문에이 메소드를 모방하거나 스텁하여 "4"(Rails에서 Thursday 목요일의 숫자)를 항상 리턴해야합니다. 그래서, 처음에는 테스트가 "4"(테스트에서 어설 션)를 수신하는지 먼저 확인하도록 설정했습니다. 오늘 (말하자면) 금요일 일 경우 테스트를 실행하면 "4"가 나오지만 "5"가 나오면 실패합니다. 즉, 메서드를받을 때 원하는 값을 반환하지 않습니다. 나는 비효율적 인 비슷한 결과로 스터 빙을 시도했다. 일반적으로 조롱은 산들 바람이지만 전화가 걸려 오는 전화는 .wday
이며 Date.today
에서 작동합니다.
이것은 레이크 작업 (I 조롱와 같은 익숙한 아니에요한다), 내가 더 뭔가를 지정해야 할 수도 있습니다,하지만 난 그것의 바닥에 얻을 수 없었던 때문에 ...
기타 명확한 정보가 필요한 경우 알려주십시오.
최고 감사합니다! 검색 및 독서에서 어떻게 그런 방식으로 쇠사슬로 묶인 방법을 작성해야하는지 명확한 예를 찾을 수는 없었지만 더 넓은 설명은 훌륭했습니다. 문제를 해결하는 것은 대단한 일이지만, 나는 스터 빙 (stubbing)의 개념을 더 잘 배웠다는 사실에 훨씬 더 흥분하고 있습니다! 너 락. – cjn
예, 제가 제안한 솔루션 대신 스텁 체인을 사용할 수 있습니다. 나는 이것을 자주 사용하지 않지만,'Date.stub_chain (: today, : wday) .and_return (4)'와 같은 것을 보게 될 것입니다. 당신을 위해 무엇이든지 작동합니다. – rossta