開発備忘録 2018/10/22

[RSpec] テストを保留にする skip と pending の違い

skip

example は実行されず、そのステータスは pending になります。

describe "an example" do
  it "is skipped" do
    skip
  end
end

=> 1 example, 0 failures, 1 pending

pending

example でエラーが発生するとそのステータスは pending となり、パスすると逆にステータスが failure になります。

describe "an example" do
  it "is implemented but waiting" do
    pending("something else getting finished")
    fail
  end
end

=> 1 example, 0 failures, 1 pending

describe "an example" do
  it "is implemented but waiting" do
    pending("something else getting finished")
    expect(1).to be(1)
  end
end

=> 1 example, 1 failure

使い分け

何らかの事情でいまはパスさせることができないけどいつか修正するよ、といったテストには pending を使い、それに当てはまらない場合は skip を使うのがいいと思います。

任意のクラスを継承しているかを調べる

ActiceRecord を継承した User クラスが存在し、それが ActiveRecord::Base を継承するのかを知りたい。

class User < ActiveRecord::Base; end

is_a?

オブジェクトが引数で受け取ったクラスのインスタンスであれば true、そうでなければ false を返します。

user = User.find(1)

user.is_a?(ActiveRecord::Base)
=> true

ancestors.include?

インスタンスからではなく、クラス自体が任意のクラスを継承しているかを知りたいとき。
ちなみに ancestors メソッドは親クラスを配列にして返します。

User.ancestors.include?(ActiveRecord::Base)
=> true