2010-12-12 50 views
0

私は次のように失敗したステップを持っているが...余分なスペースto_sを使って(:ロング)

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

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

アイデア?

+0

私たちにステップとその定義を教えてください。 –

+0

ここにステップの定義があります - > https://gist.github.com/b6ba990085532c6d05bf –

答えて

2

それはあなたがしようとすると何が起こるかです:

Date.civil(2010, 7, 4).strftime("%e") # => " 4" 

とRailsは、その:longformat%eを使用しています。面白いのは、%edocumentedではないということです。

余分なスペースを気にしない場合(余分なスペースはHTMLには表示されません)、Rubyの動作に合わせてステップ定義を調整します。あなたはそれについてのケアを行う場合は、それをスキッシュ:

Date.civil(2010, 7, 4).to_s(:long).squish # => "July 4, 2010" 

スキッシュはRailsの3の下盛であるあなたがRailsの2を使用している場合は、GSUB使用することができます。

Date.civil(2010, 7, 4).to_s(:long).gsub(/\s+/, " ") # => "July 4, 2010" 
+0

キュウリ(ブラウザと同じように)は繰り返しHTMLを無視するので、日付に2つのスペースがありますが、キュウはそれを1。 – Jacob

0

は、私は同じ問題に遭遇しました今日のキュウリ試験で!

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) 

だからデフォルトでは、これは私がRailsの3.1.3で見たものである。

> d = '2012-02-01'.to_date 
=> Wed, 01 Feb 2012 

> d.to_s(:long) 
=> "February 1, 2012" 

不思議な用途をレール日付用として("01"が得られる%d:longフォーマットの異なる日フォーマット%e、Y ields " 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" 

ソリューションは、代わりに%eのあなたのフォーマット文字列で一日のために"%-d"を使用することです:

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

0

価値があるのではなく、私はむしろ"%-d"修正を使用したいと思います(または"%-e"!Rubyのネイティブ".squeeze"、さらには".squeeze(' ')"を使用して、日付形式を混乱させたくないのであれば、同じ結果が得られます)。 )。

また、アップデートとして:@iainは、 '%e'は記載されていないと述べています。それが価値あるものであれば、it is now! (興味深いことに、あなたが試してみると、"%-e"は特に有効ではありません)

関連する問題