我的一项单元测试非常慢,每次测试都需要超过一秒钟。分析该测试文件,前几行是:
% cumulative self self total time seconds seconds calls ms/call ms/call name 198.71 12.28 12.28 2 6140.00 6140.00 Mutex#sleep 14.40 13.17 0.89 9658 0.09 1.09 REXML::Element#namespace 10.68 13.83 0.66 18814 0.04 0.08 REXML::Element#root
我无法弄清楚睡眠呼叫的来源!我的整个应用程序只在一个名为Throttle
的类中睡觉,我在它前面插入一个断点,在此测试期间不会触发。我试过了:
class Mutex
def sleep(time)
require "byebug"; byebug
end
end
从未打破过,我试过了:
def setup
Mutex.define_singleton_method(:sleep) { |time|
require "byebug"; byebug
}
end
这也绝对没有。我还使用Kernel
代替Mutex
尝试了这两种方法。我已经无数次阅读了我的代码,我不能为我的生活找出为什么我的应用程序一直在睡觉!任何人都可以给我任何指示吗?
答案 0 :(得分:0)
我明白了。结果Mutex#sleep
调用了Net::HTTP#post
。我的单元测试引导脚本应该覆盖写入磁盘或发出网络请求的所有函数,但是我忘了要求我应该覆盖的函数,所以最终结果是我的覆盖被实际函数覆盖了,导致我的单元测试向在线API发出实际请求。
我只是偶然发现了这个,因为我正在逐步执行byebug中的代码。
一旦修复了引导程序脚本,我的单元测试就会一如既往地运行。