Showing all posts tagged ruby:

RubyのDateTimeはナノ秒まで扱えないが、RailsのActiveRecordのt.timestampで生成したcreated_atカラムなどで#end_of_dateすると、ナノ秒で.999999999まで指定される

答えとしては、そもそもActiveRecordのt.timestampで生成されたcreated_atは、DateTimeではなくTime型だったということです。

ということで、テストでどう指定しようか困りました。

当座の解決策として、秒以上のみの比較と、ナノ秒の比較を分けることにしました。

expect(@invitation.expire_at.nsec).to eq(999999999)
expect(Time.at(@invitation.expire_at.to_i)).to eq(DateTime.now.change(hour: 23, min: 59, sec: 59))

カッコ悪いので何か他の書き方ないかな(※テストコードは本番コードと別の書き方をしてます)

参考: Ruby の Time でマイクロ秒・秒を切り捨てる

RubyとRails、それぞれのTimeとDateTimeについて全くテキトーに扱っていた私にとっては青天の霹靂でした。ちょうど秀逸な記事があったのでリンクを貼っておきます。

RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い http://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c

そもそもDateTimeってナノ秒まで使えないの?

使えません。秒までです。

Ruby DateTime
Rails DateTime

Rubyでは何ならナノ秒まで使えるの?

Timeなら使えます。

Ruby Time
Rails Time

感想

怖い

rspecまとめ(随時更新)version 0.0.1

rspecとは

RubyのBDD(振る舞い駆動)テストツールです。Rails組み込みの test_helper とは違うのでご注意( rails generate してできるファイルではないのです)。

3つのサブプロジェクトに分かれています。

  • rspec-core
  • rspec-expectations
  • rspec-mocks

また、Rails用に rspec-rails という拡張ライブラリもあり、これはRails3とRails4をサポートしています。
http://www.relishapp.com/rspec/rspec-rails/docs

どうやって使うの

Gemでインストール( gem install rspec )し、ファイルの先頭に require ’spec_helper’ と記述することですべての機能が使用可能になります。

見るべきドキュメントは

日本語解説サイトはそのほとんどが古いですが、「Everyday Rails - RSpecによるRailsテスト入門」というサイトは今でも頻繁に更新しており、網羅性が高いです。あとは「改めて学ぶ RSpec」というRubyist Magazineの記事も手軽で良いです。また、手を動かして覚えたいという場合には和田卓人さんの「RSpec の入門とその一歩先へ」を第一イテレーションから第三イテレーションまで履修してみるといいです。「スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)」という記事もおすすめです。

英語が読めるのであれば relish が一番新しいドキュメントでおすすめ。本家で紹介されている、公式ドキュメントです。

英語でよければrspecの本も出てるみたいです。The Rspec Book