12

Gemfile を更新して rspec 3 に移行したため、多くのテストで次のエラーが発生しました:

it "should reject attribute that are too short" do
      short = "a" * 3
      hash = @attr.merge(:details => short)
      Deal.new(hash).should have(1).error_on(:details)
    end

次のエラーが表示されます。

Failure/Error: Deal.new(hash).should have(1).error_on(:details)
     NoMethodError:
       undefined method `have' for #<RSpec::ExampleGroups::Deal_2::TestsOnDealsModelsValidations>

shouldの代わりに「expect」を使用する必要があることを読みましたが、ここではhave(1).error_on、rspec 3に準拠するにはどのように記述すればよいですか?

次のことを試しましたが、まだ機能しません。

it "should reject attribute that are too short" do
      short = "a" * 3
      hash = @attr.merge(:details => short)
      expect(Deal.new(hash).error_on(:details).size).to eq(1)
    end
4

3 に答える 3

18

のようなものを交換しました

Deal.new(hash).should have(1).error_on(:details)

deal = Deal.new(hash)
expect(deal.valid?).to be_falsey
expect(deal.errors[:details].size).to eq(1)

リストを初期化するため、最初の期待値valid?が必要です。errors

于 2014-07-16T19:43:43.883 に答える
8

haveおよび他の同様のマッチャーは、rspec コアから別の gem であるrspec-collection-matchersに移動されました。

rspec ドキュメントで詳しく説明されているように、rspec 2 -> 3 からのアップグレード パスに従うことをお勧めします: https://relishapp.com/rspec/docs/upgrade

  • rspec 2.99 にアップグレード
  • テスト スイートを実行する
  • 非推奨の警告を修正
  • rspec 3 にアップグレードします。

これを行っていた場合、コードに非推奨エラーが表示され、それを修正する方法も示されます。

于 2014-06-07T10:50:47.867 に答える
1

に追加する行Gemfileは次のとおりです。

gem 'rspec-collection_matchers'
于 2015-10-15T16:12:29.787 に答える