Дополнительный пробел в шаге огурца при использовании to_s (: long) - PullRequest
0 голосов
/ 12 декабря 2010

У меня есть шаг, который завершается неудачей со следующим ...

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

Проблема, я думаю, заключается в дополнительном интервале между "июлем" и "4". Я использую publ_on.to_s (: long) как в определении шага, так и в представлении, поэтому я не совсем уверен, откуда берется дополнительное пространство.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 12 декабря 2010

Это то, что происходит, когда вы пытаетесь:

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" 
0 голосов
/ 01 мая 2013

Для чего бы то ни было, я бы предпочел использовать исправление "%-d" (или даже "%-e"!, Который дает те же результаты), чем ".squish", который специфичен для Rails, а не как переносимый (почему бы не использоватьRuby-native ".squeeze" или даже ".squeeze(' ')" тогда, если вы не хотите возиться с форматами даты?).

Кроме того, в качестве обновления: @iain упоминает, что '%е 'не задокументировано.Что бы это ни стоило, это сейчас !(хотя, что интересно, не "%-e" специально, что, если вы попробуете это, действительно и работает!)

0 голосов
/ 01 февраля 2012

Я столкнулся с той же проблемой с моим тестом на огурец сегодня!

Проблема (как указал 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)

По умолчанию это то, что я вижу в Rails 3.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"

Прокомментируйте https://github.com/rails/rails/pull/1994, если вы хотите, чтобы это значение по умолчанию было изменено в Rails.

...