include
マッチャー
include
マッチャーを使用して、コレクションが1つ以上の期待されるオブジェクトを含むことを指定します。指定されたマッチャーをパスするコレクションのいずれかのオブジェクトがある場合に成功します。これは、#include?
に反応する任意のオブジェクト(文字列や配列など)で動作します。
(expect("a string").to include("a")
expect("a string").to include(/a|str/).twice
expect("a string").to include("str", "g")
expect("a string").not_to include("foo")
expect([1, 2]).to include(1)
expect([1, 2]).to include(1, 2)
expect([1, 2]).to include(a_kind_of(Integer))
expect([1, 2]).to include(be_odd.and be < 10 )
expect([1, 2]).to include(be_odd)
expect([1, 2]).to include(be < 10).at_least(2).times
expect([1, 2]).not_to include(17)
このマッチャーはハッシュに対しても柔軟な処理を提供します。
(expect(:a => 1, :b => 2).to include(:a)
expect(:a => 1, :b => 2).to include(:a, :b)
expect(:a => 1, :b => 2).to include(:a => 1)
expect(:a => 1, :b => 2).to include(:b => 2, :a => 1)
expect(:a => 1, :b => 2).to include(match(/b/) => 2)
expect(:a => 1, :b => 2).to include(match(/b/) => be_even)
expect(:a => 1, :b => 2).not_to include(:c)
expect(:a => 1, :b => 2).not_to include(:a => 2)
expect(:a => 1, :b => 2).not_to include(:c => 3)
配列の使用方法
次の内容で "array_include_matcher_spec.rb" という名前のファイルがあるとします:
RSpec.describe [1, 3, 7] do
it { is_expected.to include(1) }
it { is_expected.to include(3) }
it { is_expected.to include(7) }
it { is_expected.to include(1, 7) }
it { is_expected.to include(1, 3, 7) }
it { is_expected.to include(a_kind_of(Integer)) }
it { is_expected.to include(be_odd.and be < 10) }
it { is_expected.to include(be_odd).at_least(:twice) }
it { is_expected.not_to include(be_even) }
it { is_expected.not_to include(17) }
it { is_expected.not_to include(43, 100) }
# deliberate failures
it { is_expected.to include(4) }
it { is_expected.to include(be_even) }
it { is_expected.to include(be_odd).at_most(2).times }
it { is_expected.not_to include(1) }
it { is_expected.not_to include(3) }
it { is_expected.not_to include(7) }
it { is_expected.not_to include(1, 3, 7) }
# both of these should fail since it includes 1 but not 9
it { is_expected.to include(1, 9) }
it { is_expected.not_to include(1, 9) }
end
rspec array_include_matcher_spec.rb
を実行すると:
以下のすべてが出力に含まれるはずです:
| 20 の例、9 の失敗 | | [1, 3, 7] には 4 が含まれることを期待しました | | [1, 3, 7] には (偶数であること) が含まれることを期待しました | | [1, 3, 7] には (奇数であること) を最大2回まで含むことを期待しましたが、3回含まれています | | [1, 3, 7] には 1 が含まれないことを期待しました | | [1, 3, 7] には 3 が含まれないことを期待しました | | [1, 3, 7] には 7 が含まれないことを期待しました | | [1, 3, 7] には 1、3、7 が含まれないことを期待しました | | [1, 3, 7] には 9 が含まれることを期待しました | | [1, 3, 7] には 1 が含まれないことを期待しました |
文字列の使用方法
次の内容で "string_include_matcher_spec.rb" という名前のファイルがあるとします:
RSpec.describe "a string" do
it { is_expected.to include("str") }
it { is_expected.to include("a", "str", "ng") }
it { is_expected.to include(/a|str/).twice }
it { is_expected.not_to include("foo") }
it { is_expected.not_to include("foo", "bar") }
# deliberate failures
it { is_expected.to include("foo") }
it { is_expected.not_to include("str") }
it { is_expected.to include("str").at_least(:twice) }
it { is_expected.to include("str", "foo") }
it { is_expected.not_to include("str", "foo") }
end
rspec string_include_matcher_spec.rb
を実行すると:
以下のすべてが出力に含まれるはずです:
| 10 の例、5 の失敗 | | "a string" には "foo" が含まれることを期待しました | | "a string" には "str" が含まれないことを期待しました | | "a string" には "str" を最低2回含むことを期待しましたが、1回含まれています | | "a string" には "foo" が含まれることを期待しました | | "a string" には "str" が含まれないことを期待しました |
ハッシュの使用方法
「hash_include_matcher_spec.rb」という名前のファイルがあるとき、以下の内容を持つ:
RSpec.describe :a => 7, :b => 5 do
it { is_expected.to include(:a) }
it { is_expected.to include(:b, :a) }
it { is_expected.to include(:a => 7) }
it { is_expected.to include(:b => 5, :a => 7) }
it { is_expected.not_to include(:c) }
it { is_expected.not_to include(:c, :d) }
it { is_expected.not_to include(:d => 2) }
it { is_expected.not_to include(:a => 5) }
it { is_expected.not_to include(:b => 7, :a => 5) }
# deliberate failures
it { is_expected.not_to include(:a) }
it { is_expected.not_to include(:b, :a) }
it { is_expected.not_to include(:a => 7) }
it { is_expected.not_to include(:a => 7, :b => 5) }
it { is_expected.to include(:c) }
it { is_expected.to include(:c, :d) }
it { is_expected.to include(:d => 2) }
it { is_expected.to include(:a => 5) }
it { is_expected.to include(:a => 5, :b => 7) }
# Mixed cases--the hash includes one but not the other.
# All 4 of these cases should fail.
it { is_expected.to include(:a, :d) }
it { is_expected.not_to include(:a, :d) }
it { is_expected.to include(:a => 7, :d => 3) }
it { is_expected.not_to include(:a => 7, :d => 3) }
end
rspec hash_include_matcher_spec.rb
を実行すると、
以下のすべてが出力に含まれるはずです:
| 22 の例、13 の失敗 | | 期待される結果: {:a => 7, :b => 5} には :a が含まれていないはず | | 期待される結果: {:a => 7, :b => 5} には :b と :a が含まれていないはず | | 期待される結果: {:a => 7, :b => 5} には {:a => 7} が含まれていないはず | | 期待される結果: {:a => 7, :b => 5} には {:a => 7, :b => 5} が含まれていないはず | | 期待される結果: {:a => 7, :b => 5} には :c が含まれているはず | | 期待される結果: {:a => 7, :b => 5} には :c と :d が含まれているはず | | 期待される結果: {:a => 7, :b => 5} には {:d => 2} が含まれているはず | | 期待される結果: {:a => 7, :b => 5} には {:a => 5} が含まれているはず | | 期待される結果: {:a => 7, :b => 5} には {:a => 5, :b => 7} が含まれているはず | | 期待される結果: {:a => 7, :b => 5} には :d が含まれているはず | | 期待される結果: {:a => 7, :b => 5} には :a が含まれていないはず | | 期待される結果: {:a => 7, :b => 5} には {:d => 3} が含まれていないはず | | 期待される結果: {:a => 7, :b => 5} には {:a => 7} が含まれていないはず |