LoginSignup
3
0

More than 3 years have passed since last update.

Rails6 のちょい足しな新機能を試す24(unfreeze_time 編)

Last updated at Posted at 2019-05-27

はじめに

Rails 6 に追加されそうな新機能を試す第24段。 今回のちょい足し機能は、 unfreeze_time 編です。
Rails 6.0 では、 travel_back の alias として、 unfreeze_time が追加されました。

Ruby 2.6.3, Rails 6.0.0.rc1 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease でインストールできます。

せっかくなので、RSpec をインストールして試してみたいと思います。

$  rails --version
Rails 6.0.0.rc1

Rails プロジェクトを作る

rspec を使うので、 -T オプションをつけます。

$ rails new rails6_0_0rc1 -T
$ cd rails6_0_0rc1

db:create をしておく

$ bin/rails db:create

Gemfile に rspec-rails を追加する

Gemfile に rspec-rails を追加します。

Gemfile
...
group :development, :test do
  gem 'rspec-rails'
end
...

bundle を実行

$ bundle

RSpec の初期設定をする

$ rails g rspec:install

spec で unfreeze_time を使えるようにする

spec で unfreeze_time を使えるように ActiveSupport::Testing::TimeHelpers を include します。

spec/spec_helpers.rb
RSpec.configure do |config|
  ...
  require 'active_support/testing/time_helpers'
  config.include ActiveSupport::Testing::TimeHelpers
  ...
end

unfreeze_time を使った spec を書く

本来は、model とか何かしらのクラスやメソッドをテストするための spec なのですが、今回は spec だけで完結させることにしました。

before 内で freeze_time を実行し、 after 内で unfreeze_time を実行する場合と、実行しない場合を書いてみました。

spec/lib/unfreeze_time_spec.rb
require 'rails_helper'

RSpec.describe 'try to use unfreeze_time' do
  context 'when using freeze_time and unfreeze_time' do
    before :each do
      freeze_time
    end
    after :each do
      unfreeze_time
    end
    it 'time freezed' do
      t1 = Time.zone.now
      sleep 1
      expect(Time.zone.now).to eq t1
    end
  end
  context 'when without freeze_time and unfreeze_time' do
    it 'time not freezed' do
      t1 = Time.zone.now
      sleep 1
      expect(Time.zone.now).to be > t1
    end
  end
end

spec を実行する

spec を実行するとオールグリーンになります。

$ bundle exec rspec -fd

try to use unfreeze_time
  when using freeze_time and unfreeze_time
    time freezed
  when without freeze_time and unfreeze_time
    time not freezed

Finished in 2.01 seconds (files took 2.01 seconds to load)
2 examples, 0 failures

alias であることを確認する

オマケですが、 unfreeze_timetravel_back の別名であることを確認しておきます。

$ irb -ractive_support/testing/time_helpers
irb(main):001:0> ActiveSupport::Testing::TimeHelpers.instance_method(:unfreeze_time).original_name
=> :travel_back

試したソース

試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try024_unfreeze_time

参考情報

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0