@chenge 这里专门写了一篇关于如何测试 Gem,希望对你的问题能有所帮助。
#7 楼 @chenge 你用的是 minitest 吧,如果是 minitest,它不会解决加载路径的问题,所以require 'test_helper'
会找不到路径,需要用request_relative '../test_helper'
的相对路径方法。如果用的是 rspec,它是会默认先把 spec 文件夹放到加载路径下的。其实有更简单的方法,就是在 Rakefile 中添加一个 test task:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << 'test' << 'lib'
t.pattern = 'test/test_*.rb'
end
然后执行rake test
就可以了。其实还可以更简单,现在你的每个文件还是要require 'test_helper'
的,它可以默认就被加载进去,也就每个文件自动require 'test_helper'
,只需要一句话:
require 'rake/testtask'
Rake::TestTask.new do |t|
t.libs << 'test' << 'lib'
t.pattern = 'test/test_*.rb'
t.ruby_opts << '-r test_helper' # 指定ruby运行参数,自动require test_helper
end
# 再指定默认的task为test
task :default => :test
现在你的每个测试用例文件都不需要 require 什么东西了,只需要在 test_helper 中设置好就 OK 了,执行rake
$ rake
Run options: --seed 12023
# Running:
.
Finished in 0.000722s, 1385.6922 runs/s, 1385.6922 assertions/s.
1 runs, 1 assertions, 0 failures, 0 errors, 0 skips
现在执行测试是不是简单多了?
#22 楼 @pathbox ruby-prof 可以看看 RubyChina 的这篇:Ruby Profiler 详解之 ruby-prof(I),也是我们写的,Profiler 一般会输出一些格式化的数据,这时候一个好的数据查看工具也是很有帮助的。
#20 楼 @pathbox 互相学习啊,,快是因为 ruby-prof 是 c 实现的,而时间不一样也跟这个实现有关系,再一个 ruby 的 gc 是个很耗时的操作,ruby 实现的 profiler 也会增加 gc 的压力,代码写的不好的时候这个 gc 的时间可能就会占掉一半,导致计算的时间出现较大的误差,不过一般我们调优的话,不是用两个工具去调,而是用一个,先多跑几次取一个跳动不大的作为基准,针对这个基准再去调,而不是用一个绝对的值去调,所有的 profiler 都会增加程序的绝对执行时间,得出的程序运行时间都是不准确的,越是贴近底层越是接近实际的执行时间。
看看下面这几个简单的 time 结果:
real 0m1.462s
user 0m1.392s
sys 0m0.068s
real 0m20.021s
user 0m19.188s
sys 0m0.832s
real 0m2.456s
user 0m1.891s
sys 0m0.535s
内置 profiler 耗时主要增加在用户态,主要是还是因为 ruby 实现比较慢和 GC 造成的。下周可能要写一篇 GC 和内存的帖子,正好拿这个作为例子,
#18 楼 @karen2015 这是什么意思,你这么招人,估计也不会有人和你联系吧,为什么不发个招聘贴呢?
Ruby 中一般使用 Yaml,如@chenge所说,不过 Ruby 读取 Java 的 properties 文件也很容易,如果你有很多现成的 Java Properties 文件读取,可以用https://github.com/jnbt/java-properties,关于 Yaml,读读这篇入门博文Yaml Tutorial
#3 楼 @flypiggys :thumbsup:
可以试试这个:
str='\
<div class="dialog">\
<div class="title">\
<img src="close.gif" alt="点击可以关闭" />亲爱的提示条\
</div>\
<div class="content">\
<img src="delete.jpg" alt="" />\
<span>您真的要GG吗?</span>\
</div>\
<div class="bottom">\
<input id="Button2" type="button" value="确定" class="btn"/> \
<input id="Button3" type="button" value="取消" class="btn"/>\
</div>\
</div>'
console.log(str);