如何解决您如何使用rspec测试派生的代码
| 我有以下代码 def start_sunspot_server
unless @server
pid = fork do
STDERR.reopen(\"/dev/null\")
STDOUT.reopen(\"/dev/null\")
server.run
end
at_exit { Process.kill(\"TERM\",pid) }
wait_until_solr_starts
end
end
我将如何有效地使用rspec对其进行测试?
我一直在想
Kernel.should_receive(:fork)
STDERR.should_receive(:reopen).with(\"/dev/null\")
STDOUT.should_receive(:reopen).with(\"/dev/null\")
server.should_receive(:run)
等等
解决方法
在示例中,我对
@server
实例变量和server
方法感到困惑,但这是一个示例,可以帮助您到达尝试的位置:
class Runner
def run
fork do
STDERR.reopen(\"/dev/null\")
end
end
end
describe \"runner\" do
it \"#run reopens STDERR at /dev/null\" do
runner = Runner.new
runner.should_receive(:fork) do |&block|
STDERR.should_receive(:reopen).with(\"/dev/null\")
block.call
end
runner.run
end
end
关键在于,即使消息是在Kernel
模块中实现的,the5ѭ消息仍会发送给Runner
对象。
HTH,
大卫
, 大卫的解决方案对我们不起作用。也许是因为我们没有使用RSpec 2?
这是有效的方法。
def run
fork do
blah
end
end
describe \'#run\' do
it \'should create a fork which calls #blah\' do
subject.should_receive(:fork).and_yield do |block_context|
block_context.should_receive(:blah)
end
subject.run_job
end
end
我不确定在调用常量(例如STDERR)时如何应用,但这是我们能够完成派生测试的唯一方法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。