https://github.com/chloerei/code_campo
我写 Test::Unit,我觉得 Test::Unit 语法平实,更容易理解。楼主可以参考 code_campo 的 git log。
测试其实就一个逻辑:进行了什么操作,发生了什么效果。简单的测试很多时候很有效,不要把逻辑的复杂和测试的复杂绑定起来,写测试的时候把自己作为第 3 者观察就清晰很多了。
#3 楼 @cqpx http://codecampo.com/topics/84 HTML5,让 Ajax 改变 URL 且支持后退
直接用这个类
注册是 devise 提供的,一不小心忽略了
#8 楼 @tualatrix 有效 URL 里面的中文应该要转义的,chrome 能显示中文是浏览器端的处理,复制出来还是会变成转义字符。比如
我不追求完全覆盖,只要求关键覆盖。
觉得写测试时间太长的原因一是不熟练,二是没有把调试时间一起考虑。
维护别人的项目时候我才会后写测试,自己写都是先写测试。
这两个我都觉得不是好的选择……
我这明天如果没任务也去搞~
我觉得白名单写进 Model 好,不然控制器还得知道 Model 的属性。用了 attr_accessible 之后,控制器知道 role 就行了,相当于打包属性组。
为什么要手工管理软件呢
我觉得有 end 挺好,用 snippets 不用手敲,每次看见 end 会让自己有种安定感,就像开辟一个工作区一样
class Terminal
# Example:
# Terminal.set_pricings({
# "A" => {1 => 2.0, 4 => 7.0},
# "B" => {1 => 12.0},
# "C" => {1 => 1.25, 6 => 6.0},
# "D" => {1 => 0.15}
# })
def self.set_pricings(pricings)
@pricings = pricings
end
def self.pricings
@pricings
end
def initialize
@products = {}
end
def scan(name)
@products[name] = @products[name].to_i + 1
end
def total
result = 0
@products.each do |name, number|
result += self.class.item_cost(name, number)
end
result
end
def self.item_cost(name, number)
pricings[name].keys.sort.reverse.inject(0) do |sum, package|
if number / package > 0
sum += ((number / package) * pricings[name][package])
number = number % package
end
sum
end
end
end
require 'test/unit'
require 'terminal'
class TerminalTest < Test::Unit::TestCase
def setup
Terminal.set_pricings({
"A" => {1 => 2.0, 4 => 7.0},
"B" => {1 => 12.0},
"C" => {1 => 1.25, 6 => 6.0},
"D" => {1 => 0.15}
})
end
def test_should_get_cost
terminal = Terminal.new
terminal.scan 'A'
assert_equal 2.0, terminal.total
terminal.scan 'A'
assert_equal 4.0, terminal.total
2.times{ terminal.scan 'A' }
assert_equal 7.0, terminal.total
end
def test_multi_item_cost
assert_mult_scan_cost_equal 32.40, 'ABCDABAA'
assert_mult_scan_cost_equal 7.25, 'CCCCCCC'
assert_mult_scan_cost_equal 15.40, 'ABCD'
end
def assert_mult_scan_cost_equal(expected, names)
terminal = Terminal.new
names.each_char do |name|
terminal.scan name
end
assert_equal expected, terminal.total
end
end
eval 得不必要,Hash 就能解决
在我看来 @fsword 的言论没有问题。楼主专门发个道歉贴但同时想封别人的嘴真的有意识到问题吗?