огурец с таймкопом - PullRequest
       2

огурец с таймкопом

0 голосов
/ 20 июля 2011

Я пытаюсь использовать огурец и timecop вместе, и это timecop, похоже, не перекрывает мой вызов Time.now в моем файле моделиaction.rb.

Вот мой сценарий:

  @stop @wip
  Scenario: Displaying defaults when entering a form
    Given I am on the new transaction page
    And the time is Dec 31 2010, 9:00 UTC
    Then the "Tran date" field should contain "31/12/2010"

У меня есть эти шаги в файле timecop_steps.rb

Given 'the time is $time' do |time|
  Timecop.freeze Time.parse(time)
end

When '$time pass' do |time|
  Timecop.travel future_time(time)
  Given 'delayed jobs are run' # we use delayed jobs and have some that get scheduled in the future.
end

When 'time stands still' do
  Timecop.freeze Time.now
end

Затем в моем файлеaction.rb я устанавливаю значение по умолчанию:

class Transaction < ActiveRecord::Base
  def set_defaults
    self.tran_date = Time.now.strftime("%d/%m/%Y")
  end
end

Когда я запускаю свойСценарий я получаю следующее:

  Scenario: Displaying defaults when entering a form   # features/receipt_journal_new.feature:29
    Given I am on the new transaction page
                         # features/step_definitions/web_steps.rb:45
    And the time is Dec 31 2010, 9:00 UTC                              # features/step_definitions/timecop_steps.rb:1
    Then the "Tran date" field should contain "31/12/2010"             # features/step_definitions/web_steps.rb:142
      expected: /31\/12\/2010/
           got: "20/07/2011" (using =~)
      Diff:
      @@ -1,2 +1,2 @@
      -/31\/12\/2010/
      +20/07/2011
       (RSpec::Expectations::ExpectationNotMetError)
      ./features/step_definitions/web_steps.rb:147:in `block (2 levels) in <top (required)>'
      ./features/step_definitions/web_steps.rb:30:in `with_scope'
      ./features/step_definitions/web_steps.rb:143:in `/^the "([^"]*)" field(?: within (.*))? should contain "([^"]*)"$/'
      features/transaction_new.feature:32:in `Then the "Tran date" field should contain "31/12/2010"'

Обновление:

Я даже пытался заглушить Time.now, и это тоже не сработало:

Given 'the time is $time' do |time|
  Time.stub!(:now).and_return("31/12/2010") #Time.parse(time))
#  Timecop.freeze Time.parse(time)
end

Обновление 2:

Я пытался использовать хронический, а также Timecop.travel вместо Timecop.freeze, как в этой статье:

http://www.louismrose.me.uk/post/876230592/freezing-time-in-cucumber

Обновление 3:

Я тестировал Timecop в своих тестах модели rspec, и он отлично работает.

1 Ответ

0 голосов
/ 21 июля 2011

Ответом был просто порядок, в котором я устанавливал Timecop в моем Сценарии

Given the time is Dec 31 2010, 9:00 UTC
And I am on the new transaction page
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...