0

次のように失敗するステップがあります...

expected #has_content?("July  4, 2009") to return true, got false

問題は、「July」と「4」の間の余分なスペースだと思います。ステップ定義とビューの両方で published_on.to_s(:long) を使用しているため、余分なスペースがどこから来ているのか完全にはわかりません。

何か案は?

4

3 に答える 3

2

試してみると、次のようになります。

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" 
于 2010-12-12T11:56:18.030 に答える
0

今日のキュウリのテストでも同じ問題が発生しました。

問題は(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にコメントしてください。

于 2012-02-01T00:22:40.393 に答える