Rspec-matchers

提供:Dev Guides
移動先:案内検索

RSpec-マッチャー

元のHello Worldの例を思い出すと、次のような行が含まれていました-

expect(message).to eq "Hello World!"

キーワードeqlは RSpec 「マッチャー」です。 ここでは、RSpecの他のタイプのマッチャーを紹介します。

平等/同一性マッチャー

オブジェクトまたは値の等価性をテストするマッチャー。

Matcher Description Example
eq Passes when actual == expected expect(actual).to eq expected
eql Passes when actual.eql?(expected) expect(actual).to eql expected
be Passes when actual.equal?(expected) expect(actual).to be expected
equal Also passes when actual.equal?(expected) expect(actual).to equal expected

describe "An example of the equality Matchers" do

   it "should show how the equality Matchers work" do
      a = "test string"
      b = a

      # The following Expectations will all pass
      expect(a).to eq "test string"
      expect(a).to eql "test string"
      expect(a).to be b
      expect(a).to equal b
   end

end

上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-

.
Finished in 0.036 seconds (files took 0.11901 seconds to load)
1 example, 0 failures

比較マッチャー

値と比較するためのマッチャー。

Matcher Description Example
> Passes when actual > expected expect(actual).to be > expected
>= Passes when actual >= expected expect(actual).to be >= expected
< Passes when actual < expected expect(actual).to be < expected
Passes when actual ⇐ expected expect(actual).to be ⇐ expected
be_between inclusive Passes when actual is ⇐ min and >= max expect(actual).to be_between(min, max).inclusive
be_between exclusive Passes when actual is < min and > max expect(actual).to be_between(min, max).exclusive
match Passes when actual matches a regular expression expect(actual).to match(/regex/)

describe "An example of the comparison Matchers" do

   it "should show how the comparison Matchers work" do
      a = 1
      b = 2
      c = 3
      d = 'test string'

      # The following Expectations will all pass
      expect(b).to be > a
      expect(a).to be >= a
      expect(a).to be < b
      expect(b).to be <= b
      expect(c).to be_between(1,3).inclusive
      expect(b).to be_between(1,3).exclusive
      expect(d).to match/TEST/i
   end

end

上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-

.
Finished in 0.013 seconds (files took 0.11801 seconds to load)
1 example, 0 failures

クラス/タイプマッチャー

オブジェクトのタイプまたはクラスをテストするためのマッチャー。

Matcher Description Example
be_instance_of Passes when actual is an instance of the expected class. expect(actual).to be_instance_of(Expected)
be_kind_of Passes when actual is an instance of the expected class or any of its parent classes. expect(actual).to be_kind_of(Expected)
respond_to Passes when actual responds to the specified method. expect(actual).to respond_to(expected)

describe "An example of the type/class Matchers" do

   it "should show how the type/class Matchers work" do
      x = 1
      y = 3.14
      z = 'test string'

      # The following Expectations will all pass
      expect(x).to be_instance_of Fixnum
      expect(y).to be_kind_of Numeric
      expect(z).to respond_to(:length)
   end

end

上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-

.
Finished in 0.002 seconds (files took 0.12201 seconds to load)
1 example, 0 failures

True/False/Nilマッチャー

値がtrue、false、またはnilかどうかをテストするためのマッチャー。

Matcher Description Example
be true Passes when actual == true expect(actual).to be true
be false Passes when actual == false expect(actual).to be false
be_truthy Passes when actual is not false or nil expect(actual).to be_truthy
be_falsey Passes when actual is false or nil expect(actual).to be_falsey
be_nil Passes when actual is nil expect(actual).to be_nil

describe "An example of the true/false/nil Matchers" do
   it "should show how the true/false/nil Matchers work" do
      x = true
      y = false
      z = nil
      a = "test string"

      # The following Expectations will all pass
      expect(x).to be true
      expect(y).to be false
      expect(a).to be_truthy
      expect(z).to be_falsey
      expect(z).to be_nil
   end
end

上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-

.
Finished in 0.003 seconds (files took 0.12301 seconds to load)
1 example, 0 failures

エラーマッチャー

コードのブロックでエラーが発生した場合のテスト用のマッチャー。

Matcher Description Example
raise_error(ErrorClass) Passes when the block raises an error of type ErrorClass. expect {block}.to raise_error(ErrorClass)
raise_error("error message") Passes when the block raise an error with the message “error message”. expect {block}.to raise_error(“error message”)
raise_error(ErrorClass, "error message") Passes when the block raises an error of type ErrorClass with the message “error message” expect {block}.to raise_error(ErrorClass,“error message”)

次のコードを error_matcher_spec.rb という名前のファイルに保存し、このコマンドで実行します- rspec error_matcher_spec.rb

describe "An example of the error Matchers" do
   it "should show how the error Matchers work" do

      # The following Expectations will all pass
      expect { 1/0 }.to raise_error(ZeroDivisionError)
      expect { 1/0 }.to raise_error("divided by 0")
      expect { 1/0 }.to raise_error("divided by 0", ZeroDivisionError)
   end
end

上記のコードが実行されると、次の出力が生成されます。 秒数は、お使いのコンピューター上でわずかに異なる場合があります-

.
Finished in 0.002 seconds (files took 0.12101 seconds to load)
1 example, 0 failures