18

郵便番号属性の長さをテストして、5 文字であることを確認しようとしています。現在、空白ではなく、4 文字では短すぎ、6 文字では長すぎることを確認するためにテストしています。

正確に5文字であることをテストする方法はありますか? これまでのところ、オンラインや rspec の本には何も見つかりませんでした。

4

5 に答える 5

23

haveRSpec の最新のメジャー リリースにはマッチャーがありません。

RSpec 3.1 の時点で、これをテストする正しい方法は次のとおりです。

expect("Some string".length).to be(11)

于 2014-10-24T09:21:38.363 に答える
18

RSpec はこれを可能にします:

expect("this string").to have(5).characters

実際には「文字」の代わりに何でも書くことができます。それは単なる構文糖衣です。起こっていることは、RSpec がこの件について呼びかけ#lengthていることだけです。

ただし、あなたの質問からは、実際に検証をテストしたいように思えます。その場合、@rossta のアドバイスに従います。

アップデート:

RSpec 3 以降、これは rspec-expectations の一部ではなくなりましたが、別の gem として利用できます: https://github.com/rspec/rspec-collection_matchers

于 2013-04-21T21:00:07.327 に答える
2

コレクション マッチャー (文字列、ハッシュ、配列に対してアサートするすべてのマッチャー) は、個別の gem rspec-collection_matchersに抽象化されています。

これらのマッチャーを使用するには、これを に追加しますGemfile

gem 'rspec-collection_matchers'

または.gemspec、gem に取り組んでいる場合:

spec.add_development_dependency 'rspec-collection_matchers'

次に、これをに追加しますspec_helper.rb

require 'rspec/collection_matchers'

そして、仕様でコレクション マッチャーを使用できるようになります。

require spec_helper
describe 'array' do
    subject { [1,2,3] }
    it { is_expected.to have(3).items }
    it { is_expected.to_not have(2).items }
    it { is_expected.to_not have(4).items }

    it { is_expected.to have_exactly(3).items }
    it { is_expected.to_not have_exactly(2).items }
    it { is_expected.to_not have_exactly(4).items }

    it { is_expected.to have_at_least(2).items }
    it { is_expected.to have_at_most(4).items }

    # deliberate failures
    it { is_expected.to_not have(3).items }
    it { is_expected.to have(2).items }
    it { is_expected.to have(4).items }

    it { is_expected.to_not have_exactly(3).items }
    it { is_expected.to have_exactly(2).items }
    it { is_expected.to have_exactly(4).items }

    it { is_expected.to have_at_least(4).items }
    it { is_expected.to have_at_most(2).items }
end

itemsと互換的に使用できることに注意してくださいcharacters。これらは単なる構文糖であり、haveマッチャーとそのバリアントは、配列、ハッシュ、および文字列で使用できます。

于 2015-08-01T14:54:31.467 に答える
2

ActiveRecord モデルで検証をテストしている場合は、試してみることをお勧めしshoulda-matchersます。これは、Rails に役立つ一連の便利な RSpec 拡張機能を提供します。郵便番号属性の簡単な 1 行仕様を記述できます。

describe Address do
  it { should ensure_length_of(:zip_code).is_equal_to(5).with_message(/invalid/) }
end
于 2013-04-20T09:44:49.020 に答える