次のように失敗するステップがあります...
expected #has_content?("July 4, 2009") to return true, got false
問題は、「July」と「4」の間の余分なスペースだと思います。ステップ定義とビューの両方で published_on.to_s(:long) を使用しているため、余分なスペースがどこから来ているのか完全にはわかりません。
何か案は?
次のように失敗するステップがあります...
expected #has_content?("July 4, 2009") to return true, got false
問題は、「July」と「4」の間の余分なスペースだと思います。ステップ定義とビューの両方で published_on.to_s(:long) を使用しているため、余分なスペースがどこから来ているのか完全にはわかりません。
何か案は?
試してみると、次のようになります。
Date.civil(2010, 7, 4).strftime("%e") # => " 4"
また、Rails は%e
その:long
形式で を使用します。面白いことに、それ%e
は文書化されていません。
余分なスペースが気にならない場合は、Ruby の動作に合わせてステップ定義を調整します (いずれにせよ、余分なスペースは HTML では表示されません)。あなたがそれを気にするなら、それをつぶしてください:
Date.civil(2010, 7, 4).to_s(:long).squish # => "July 4, 2010"
Squish は Rails 3 で利用できます。Rails 2 を使用している場合は、gsub を使用できます。
Date.civil(2010, 7, 4).to_s(:long).gsub(/\s+/, " ") # => "July 4, 2010"
今日のキュウリのテストでも同じ問題が発生しました。
問題は(iainが指摘したように)それDate::DATE_FORMATS[:long]
です"%B %e, %Y"
。に%e
よると、は空白で埋められた日番号ri strftime
を生成します。
%d - Day of the month, zero-padded (01..31)
%-d no-padded (1..31)
%e - Day of the month, blank-padded ( 1..31)
したがって、デフォルトでは、これはRails3.1.3に表示されるものです。
> d = '2012-02-01'.to_date
=> Wed, 01 Feb 2012
> d.to_s(:long)
=> "February 1, 2012"
不思議なことに、Railsは、日付(、を生成する)と同様に、時間(、を生成する)の:long
形式に異なる日の形式を使用します。%d
"01"
%e
" 1"
> d = '2012-02-01'.to_time
=> 2012-02-01 00:00:00 UTC
> d.to_s(:long)
=> "February 01, 2012 00:00"
> Time::DATE_FORMATS[:long]
=> "%B %d, %Y %H:%M"
> Date::DATE_FORMATS[:long]
=> "%B %e, %Y"
解決策"%-d"
は、次の代わりにフォーマット文字列でその日を使用することです%e
。
> Date::DATE_FORMATS[:long] = "%B %-d, %Y"
=> "%B %-d, %Y"
> d = '2012-02-01'.to_date
Wed, 01 Feb 2012
> d.to_s(:long)
=> "February 1, 2012"
この行を新しい初期化子に追加するだけですconfig/initializers/date_formats.rb
。
Date::DATE_FORMATS[:long] = "%B %-d, %Y"
Railsでこのデフォルトが変更されていることを確認したい場合は、 https://github.com/rails/rails/pull/1994にコメントしてください。