RSpec-マッチャー
元のHelloWorldの例を思い出すと、次のような行が含まれていました-
expect(message).to eq "Hello World!"
キーワードeqlは RSpec「マッチャー」。ここでは、RSpecの他のタイプのマッチャーを紹介します。
平等/アイデンティティマッチャー
オブジェクトまたは値の同等性をテストするためのマッチャー。
マッチャー | 説明 | 例 |
---|---|---|
eq | 実際の==期待されるときに合格 | expect(actual).toeqexpected |
eql | actual.eql?(expected)のときに合格 | expect(actual).toeqlexpected |
あります | actual.equal?(期待される)のときに合格 | 期待する(実際)期待される |
等しい | actual.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
比較マッチャー
値と比較するためのマッチャー。
マッチャー | 説明 | 例 |
---|---|---|
>> | 実際の>期待されるときに合格 | 期待(実際)>期待される |
> = | 実際の> =期待されるときに合格 | 期待(実際)> =期待 |
< | 実際の<期待されるときに合格 | 期待(実際)。<期待される |
<= | 実際の<=期待されるときに合格 | expect(actual).to be <=期待される |
be_between包括的 | 実際が<=最小および> =最大の場合に合格 | expect(actual).to be_between(min、max).inclusive |
be_between排他的 | 実際が<最小および>最大の場合に合格 | expect(actual).to be_between(min、max).exclusive |
一致 | 実際が正規表現と一致する場合に合格 | 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
クラス/タイプマッチャー
オブジェクトのタイプまたはクラスをテストするためのマッチャー。
マッチャー | 説明 | 例 |
---|---|---|
be_instance_of | actualが期待されるクラスのインスタンスである場合に渡されます。 | expect(actual).to be_instance_of(Expected) |
be_kind_of | actualが期待されるクラスまたはその親クラスのインスタンスである場合に渡されます。 | expect(actual).to be_kind_of(Expected) |
に対応する | 実際に指定されたメソッドに応答したときに渡されます。 | expect(actual).to response_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であるかどうかをテストするためのマッチャー。
マッチャー | 説明 | 例 |
---|---|---|
本当だ | 実際の場合に合格== true | 期待する(実際)。 |
偽りである | 実際の場合に合格== false | 期待(実際)は偽である |
be_truthy | 実際が偽またはゼロでない場合に合格 | expect(actual).to be_truthy |
be_falsey | 実際がfalseまたはnilの場合に合格 | expect(actual).to be_falsey |
be_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
エラーマッチャー
コードのブロックでエラーが発生した場合のテスト用マッチャー。
マッチャー | 説明 | 例 |
---|---|---|
raise_error(ErrorClass) | ブロックがタイプErrorClassのエラーを発生させたときに渡されます。 | {block} .to raise_error(ErrorClass)を期待します |
raise_error( "エラーメッセージ") | ブロックが「エラーメッセージ」というメッセージでエラーを発生させたときに渡されます。 | {block} .to raise_error( "error message")を期待してください |
raise_error(ErrorClass、 "エラーメッセージ") | ブロックが「エラーメッセージ」というメッセージとともにタイプErrorClassのエラーを発生させたときに渡されます | {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