私はいくつかの期限が、異なる時間帯と異なる時間帯に正しく表示されることをテストしたいと思います。私のテストではcapybara + rspec + phantomjsを使用しています。capybara/phantomjsテストの時間を制御する方法
私はブロックをTimecop.travel(datetime)に渡しています。そのブロック内のテスト内のコードが模擬datetimeを正しく取得していますが、PhantomJS/mockedブラウザが模擬時間を取得していないようです。
PhantomJSをTimecopと連動させる方法はありますか?あるいは、テスト目的のために時間を模擬したり操作したりする他の方法?
ここに、私が意味するものを説明する簡単な例があります。
time_spec.rb:
it "should show the Time travel date" do
# current date is 2017-01-24
Date.today.should == Date.parse("2017-01-24")
Timecop.travel(Time.parse("2001-01-01 01:01")) {
sign_in(user)
visit "/#{user.username}"
Date.today.should == Date.parse("2001-01-01")
page.should have_text("Today is 2001-01-01")
page.should have_text("Javascript says 2001-01-01")
}
end
user.html.erb:テストを実行しているの
<p>Today is <%= Time.now.iso8601 %></p>
<script>
var now = moment().format()
$('p').append("<p>Javascript says "+now+"</p>")
</script>
出力:あなたはTimeCopだけ調整
Failures:
1) Dashboard should show the time travel date
Failure/Error: page.should have_text("Javascript says 2001-01-01")
expected to find text "Javascript says 2001-01-01" in
"Today is 2001-01-01T01:01:00-08:00 Javascript says 2017-01-24T12:36:02-08:00"
# ./spec/features/time_spec.rb:67:in `block (3 levels) in <top (required)>'
# /gems/ruby-2.2.0/gems/timecop-0.8.0/lib/timecop/timecop.rb:147:in `travel'
# /gems/ruby-2.2.0/gems/timecop-0.8.0/lib/timecop/timecop.rb:121:in `send_travel'
# /gems/ruby-2.2.0/gems/timecop-0.8.0/lib/timecop/timecop.rb:62:in `travel'
# ./spec/features/time_spec.rb:59:in `block (2 levels) in <top (required)>'