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