开发者

cucumber with timecop

I'm trying to use cucumber and timecop together and it's timecop doesn't seem to be overriding my Time.now call in my transaction.rb model file.

Here is my Scenario:

  @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"

I have these steps in a timecop_steps.rb file

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

Then in my transaction.rb file I set my default:

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

When I run my scenario I get the following:

  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"'

Update:

I've even tried stubbing out Time.now and that didn't work either:

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

Update2:

I've tried using chronic as well as using Timecop.travel instead of Timecop.freeze as in this article:

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

Update3:

I've tested Timecop in my rspec model tests and it works fine.


The answer was simply the order in which I was setting Timecop in my Scenario

Given the time is Dec 31 2010, 9:00 UTC
And I am on the new transaction page
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜