【发布时间】:2014-10-25 00:50:38
【问题描述】:
我正在尝试在 rspec 的 rake 任务中模拟 Date.today.wday。
Gem 版本:RSpec 2.14.8 --- Rails 4.1.1 --- ruby 2.0.0
这是我的测试的简化伪造版本,基本上说明了我正在尝试做的事情:
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 中星期四的天数)。因此,我最初设置我的测试以首先验证它正在接收“4”(测试中的断言)。如果今天是星期五(现在是星期五)并且我运行测试,它会失败说它期望“4”但得到“5”。也就是说,当我收到方法时,它没有返回我想要的值。我试过用类似的无效结果存根。通常,嘲笑是轻而易举的事,但似乎挂断的是.wday,它在Date.today 上运行。
因为这是一个 rake 任务(我对模拟不太熟悉),所以我可能需要进一步指定一些内容,但我无法深入了解它...
如果您需要任何其他澄清信息,请告诉我。
【问题讨论】:
标签: ruby-on-rails rspec rake