我正在参加Ruby Koans的练习,我发现以下我发现真的无法解释的Ruby怪癖:
array = [:peanut, :butter, :and, :jelly]
array[0] #=> :peanut #OK!
array[0,1] #=> [:peanut] #OK!
array[0,2] #=> [:peanut, :butter] #OK!
array[0,0] #=> [] #OK!
array[2] #=> :and #OK!
array[2,2] #=> [:and, :jelly] #OK!
array[2,20] #=> [:and, :jelly] #OK!
array[4] #=> nil #OK!
array[4,0] #=> [] #HUH?? Why's that?
array[4,100] #=> [] #Still HUH, but consistent with previous one
array[5] #=> nil #consistent with array[4] #=> nil
array[5,0] #=> nil #WOW. Now I don't understand anything anymore...
Run Code Online (Sandbox Code Playgroud)
那么为什么 …
我正在升级Rails 2到Rails 3应用程序(代码不是由我编写的).(经过良好测试的代码)使用shoulda和Test :: Unit,并广泛使用宏should_create和should_change.
我从这个讨论中了解到,shoulda维护者希望摆脱这两种方法,但使用Test :: Unit的人并不觉得有必要(不确定我是否正在抓住整个讨论).
Anaway,有没有办法选择性地转换指定宏的弃用警告?我已经从这篇文章中了解到,您可以通过设置完全关闭Rake测试输出中的弃用警告:
ActiveSupport::Deprecation.silenced = true
Run Code Online (Sandbox Code Playgroud)
在您的测试环境文件中,我也知道您可以将特定的代码块放在一个块中以使它们静音:
ActiveSupport::Deprecation.silence do
# no warnings for any use of deprecated methods here
end
Run Code Online (Sandbox Code Playgroud)
后者是一个选项,但需要我遍历所有测试并将should_create宏包含在这样的块中.所以我想知道有一种方法可以完全消除特定宏的警告,只需一个配置设置?
当发送标题'Content-type:application/json'时,Rails会在几个级别更改行为:
如果我不能信任(外部)客户端传递正确的标题怎么办?换句话说,我希望我的应用程序的行为好像客户端总是传递'Content-type:application/json'标头,即使客户端实际上没有?
在测试Flash消息和生成的视图时,是否应该使用一种语言测试生成的输出:
should_set_the_flash_to /Hello/i
Run Code Online (Sandbox Code Playgroud)
或者你应该把I18N带入你的测试中:
should_set_the_flash_to I18n.t("sign_up.welcome")
Run Code Online (Sandbox Code Playgroud)
可能是我的问题不是正确的问题...如果已经有很好的解释结合测试和i18n,请随意回答链接...
更新:在Arsen7的回答之后输入正确的国际化代码,thx Arsen7!